В Magento PHP cron не удается открыть необходимые файлы php

Мы пытаемся настроить работу cron для сайта Magento.

Мы попробовали эту работу, но она не сработала для нас:

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

Для отладки мы попробовали эту работу:

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

В результате мы нашли эти ошибки в 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);
}

3 ответа

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

Похоже, ваш required файлы не могут быть найдены и поэтому выдает ошибку. Я предполагаю, что эти файлы находятся в /var/www/html/sitename/app/? В этом случае добавьте следующую строку в начале вашего cron.php:

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

Вам также может понадобиться изменить require Заявления для включения косой черты в начале адреса:

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

Это действительно дикое предположение, но включение может быть неудачным из-за прав доступа к каталогу / файлу.

Убедитесь, что пользователь, для которого вы запускаете задание cron, имеет все права на доступ к каталогу, в котором cron.php файл и все файлы, которые он открывает.

Возможно, вы изменили разрешения для веб-сервера, который работает под www-data, но вы запускаете Cron job от Fe magento пользователь.

Возможно, вы захотите добавить больше информации в свой вопрос об окружающей среде (id -u) и разрешения (ls -l /var/www/html/sitename/*) для дальнейшей отладки вашей проблемы.

Как уже упоминали другие, ваш демон cron работает правильно, но у PHP возникают проблемы с поиском необходимых файлов, необходимых для выполнения cron.php. PHP ищет их в путях включения, указанных в php.ini, и дополнительно в корне документа для модуля apache, поэтому сам сайт работает, для версии PHP для командной строки этот дополнительный путь является текущим рабочим каталогом.

Это должно работать, если вы убедитесь, что PHP выполняется из корня документа, т.е. измените cron для запуска команды следующим образом:

*/5 * * * * cd /var/www/html/sitename && php -f /var/www/html/sitename/cron.php
Другие вопросы по тегам