我们正在尝试为 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);
}
看起来你的
required
文件找不到,所以它抛出了错误。我想这些文件在/var/www/html/sitename/app/
? 在这种情况下,在您的开头添加以下行cron.php
:您可能还需要修改
require
语句以在地址开头包含正斜杠:这是一个非常疯狂的猜测,但由于目录/文件权限,包含可能会失败。
确保您正在为其运行 cron 作业的用户拥有访问
cron.php
文件所在目录及其打开的所有文件的所有权限。您可能已经调整了在 下运行的网络服务器的权限
www-data
,但您正在从 femagento
用户运行 cronjob。您可能希望在有关环境 (
id -u
) 和权限 (ls -l /var/www/html/sitename/*
) 的问题中添加更多信息,以进一步调试您的问题。正如其他人提到的那样,您的 cron 守护程序工作正常,但 PHP 在查找 cron.php 需要执行的所需文件时遇到问题。PHP 在 php.ini 指定的包含路径以及 apache 模块的文档根目录中查找这些,因此该站点本身可以工作,对于 PHP 的命令行版本,此附加路径是当前工作目录。
如果您确保从文档根目录执行 PHP,它应该可以工作,即更改 cron 以按如下方式运行命令: