Answers:
最好运行cron.sh
从Magento EE 1.13.x和CE 1.8.x开始,cron机制发生了变化,Magento引入了新的调度模式功能。
有2种可用模式:1.默认-运行计划的任务。2.始终-顾名思义,每次cron触发时,这些任务将无条件执行,不需要明确定义的时间表。
基本上,不带任何参数的cron.php调用使用shell_exec来执行cron.sh的两个进程。每个参数都有不同的参数(“默认”或“始终”)。Cron.sh依次将此参数传递回cron.php,然后执行cron。Magento内部使用其事件基础结构,通过调度名称为“ default”和“ always”的事件来处理两种模式。然后,Mage_Cron实现两个观察者方法。
查看cron.php,您会注意到PHP函数shell_exec的用法。除了安全方面的考虑,该函数还可以在发生错误或程序不输出时返回NULL。使用此功能无法检测执行失败。这意味着在您的脚本/代码由于错误而失败的任何给定时刻,都会发生以下情况:1. cronjob变得陈旧; 2.没有记录任何错误; 3.没有人知道这一切已发生。
为了克服这个问题,应该添加以下cronjob:
*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default
*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always
这将确保进程模式始终在不使用回退PHP函数shell_exec的情况下运行,并且确保cron不会过时,因为如果确实发生错误,则会抛出异常。
*/5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=default */5 * * * * www-data /bin/sh /path/to/magento/cron.sh cron.php -m=always
并且这些命令给出了nupur walia的“找不到命令”错误
*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
www-data
将更改为任何运行Web服务器进程的用户。同样值得注意的是,对于许多CPanel / WHM托管设置,shell_exec()
都将被禁用。