最好运行哪个cron脚本?cron.php或cron.sh


27

Magento在其根目录中提供了两个cron脚本,即cron.php和cron.sh。

哪个更好,为什么?

Answers:


31

最好运行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不会过时,因为如果确实发生错误,则会抛出异常。


只是要补充一点,上面的示例cron表达式非常通用。www-data将更改为任何运行Web服务器进程的用户。同样值得注意的是,对于许多CPanel / WHM托管设置,shell_exec()都将被禁用。
pspahn

*/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的“找不到命令”错误
阿米特·贝拉

如果收到该错误,则需要检查3件事:1)www-data是该服务器上可以运行此过程的正确用户,否则将其更改为任何用户。2)检查sh的位置,因此运行“哪一个sh”,它应该输出该位置,如果路径不同,它将替换“ / bin / sh”。3)最后检查cron.sh的路径是否正确。
2015年

@AmitBera我收到相同的错误消息,但无法与www-data,root或任何其他用户一起使用。实际上,我只是省略了用户,现在可以使用了,所以*/5 * * * * /bin/sh /path/to/magento/cron.sh cron.php -m=default
迈克尔

@Shaughn您能解释一下默认始终模式的用途吗?
罗汉·哈帕尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.