El trabajo cron PHP de Magento no puede abrir los archivos php requeridos

El trabajo cron PHP de Magento no puede abrir los archivos php requeridos

Estamos intentando configurar una tarea cron para el sitio Magento.

Probamos este trabajo, pero no funcionó para nosotros:

*/5 * * * * php -f /var/www/html/sitename/cron.php

Para depurar probamos este trabajo:

*/5 * * * * /usr/bin/php  -q /var/www/html/sitename/cron.php > 
/var/www/html/sitename/cron-temp.log 2>&1

Como resultado, encontramos estos errores en cron-temp.log:

PHP Warning:  require(app/bootstrap.php): failed to open stream:
 No such file or directory in /var/www/html/sitename/cron.php on line 30

    PHP Fatal error:  require(): Failed opening required 'app/bootstrap.php' 
(include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/sitename
/cron.php on line 30

cron.php

<?php


// Change current directory to the directory of current script
chdir(dirname(__FILE__));

require 'app/bootstrap.php';
require 'app/Mage.php';

if (!Mage::isInstalled()) {
    echo "Application is not installed yet, please complete install wizard first.";
    exit;
}

// Only for urls
// Don't remove this
$_SERVER['SCRIPT_NAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_FILENAME'] = str_replace(basename(__FILE__), 'index.php', $_SERVER['SCRIPT_FILENAME']);

Mage::app('admin')->setUseSessionInUrl(false);

umask(0);

$disabledFuncs = explode(',', ini_get('disable_functions'));
$isShellDisabled = is_array($disabledFuncs) ? in_array('shell_exec', $disabledFuncs) : true;
$isShellDisabled = (stripos(PHP_OS, 'win') === false) ? $isShellDisabled : true;
$isShellDisabled = true;

try {
    if (stripos(PHP_OS, 'win') === false) {
        $options = getopt('m::');
        if (isset($options['m'])) {
            if ($options['m'] == 'always') {
                $cronMode = 'always';
            } elseif ($options['m'] == 'default') {
                $cronMode = 'default';
            } else {
                Mage::throwException('Unrecognized cron mode was defined');
            }
        } else if (!$isShellDisabled) {
            $fileName = basename(__FILE__);
            $baseDir = dirname(__FILE__);
            shell_exec("/bin/sh $baseDir/cron.sh $fileName -mdefault 1 > /dev/null 2>&1 &");
            shell_exec("/bin/sh $baseDir/cron.sh $fileName -malways 1 > /dev/null 2>&1 &");
            exit;
        }
    }

    Mage::getConfig()->init()->loadEventObservers('crontab');
    Mage::app()->addEventArea('crontab');
    if ($isShellDisabled) {
        Mage::dispatchEvent('always');
        Mage::dispatchEvent('default');
    } else {
        Mage::dispatchEvent($cronMode);
    }
} catch (Exception $e) {
    Mage::printException($e);
    exit(1);
}

Respuesta1

PHP Fatal error:  require(): Failed opening required 'app/bootstrap.php' 
(include_path='.:/usr/share/php:/usr/share/pear')

Parece que requiredno se pueden encontrar sus archivos y por eso arroja el error. Supongo que estos archivos están en /var/www/html/sitename/app/? En este caso, agregue la siguiente línea al comienzo de su cron.php:

set_include_path('/var/www/html/sitename/');

Es posible que también deba modificar sus requiredeclaraciones para incluir una barra diagonal al comienzo de la dirección:

require '/app/bootstrap.php';
require '/app/Mage.php';

Respuesta2

Esta es una suposición realmente descabellada, pero la inclusión podría estar fallando debido a los permisos del directorio/archivo.

Asegúrese de que el usuario para el que está ejecutando el trabajo cron tenga todos los derechos para acceder al directorio donde cron.phpse encuentra el archivo y a todos los archivos que abre.

Es posible que haya modificado los permisos del servidor web que se ejecuta en www-data, pero está ejecutando el cronjob desde este magentousuario.

Es posible que desee agregar más información a su pregunta sobre el entorno ( id -u) y los permisos ( ls -l /var/www/html/sitename/*) para depurar aún más su problema.

Respuesta3

Como otros han mencionado, su demonio cron está funcionando correctamente, pero PHP tiene problemas para encontrar los archivos necesarios que cron.php requiere para ejecutarse. PHP los busca en las rutas de inclusión especificadas por php.ini y, además, en la raíz del documento para el módulo de Apache, por lo que el sitio en sí funciona; para la versión de línea de comandos de PHP, esta ruta adicional es el directorio de trabajo actual.

Debería funcionar si se asegura de que PHP se ejecute desde la raíz del documento, es decir, cambie cron para ejecutar el comando de la siguiente manera:

*/5 * * * * cd /var/www/html/sitename && php -f /var/www/html/sitename/cron.php

información relacionada