Magento PHP cron 作業無法開啟所需的 php 文件

Magento PHP cron 作業無法開啟所需的 php 文件

我們正在嘗試為 Magento 網站設定 cron 作業。

我們嘗試了這項工作,但它對我們不起作用:

*/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);
}

答案1

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';

答案2

這確實是一個瘋狂的猜測,但由於目錄/檔案權限的原因,包含可能會失敗。

確保您為其執行 cron 作業的使用者擁有存取檔案所在cron.php目錄及其開啟的所有檔案的所有權限。

您可能已經調整了在 下運行的網路伺服器的權限,但您正在從 fe用戶www-data執行 cronjob 。magento

您可能需要在有關環境 ( id -u) 和權限 ( ls -l /var/www/html/sitename/*) 的問題中添加更多信息,以進一步調試您的問題。

答案3

正如其他人所提到的,您的 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

相關內容