使用wget、curl和php进行cronjobs

5

我一直在想,使用wget [参数]、curl [参数]和php [参数]在创建cron作业时是否有区别?

如果我有一个名为“cron-00-00.php”的脚本需要运行,那么上述提到的每个命令会有什么不同的效果呢?

0 0 * * * php -q /your_abolute_path/includes/php/cron/cron-00-00.php >/dev/null 2>&1
0 0 * * * wget -O - -q -t 1 http://your_domain_com/includes/php/cron/cron-00-00.php >/dev/null 2>&1
0 0 * * * curl http://your_domain_com/includes/php/cron/cron-00-00.php

那么我是可以选择其中一个来使用的吗(取决于哪个最适合我)?

我目前认为这三个有不同的功能,请纠正我的理解。


1
是的,有所不同。但是你具体想知道什么呢?因为在你的情况下可能根本没有区别。除此之外,如果您可以在CLI中执行脚本,我更喜欢这样做,而不是像Wget和Curl一样运行HTTP请求。 - hakre
2
主要的区别是,curl+wget方法(本质相同)将填充 $_SERVER 中的 HTTP 标头。命令行调用则不会。 - Leigh
2
除了@Leigh的评论之外,curl+wget与apache用户一起运行,而php cli则与cron用户一起运行。 - m4t1t0
谢谢大家,这真的很有帮助。我想我会选择php cli选项,并观察一周的性能。再次感谢。 - Khalid Okiely
1个回答

9

直接运行PHP是最简单的选项。它不会占用您Apache(或其他Web服务器)实例上的网络插槽。 它还可以绕过与旨在保护您机器免受恶意第三方攻击的Web服务器相关的限制。 但是,命令行版本的PHP运行环境略有不同,可能足以防止编写不良的脚本正常运行。 此外,一些Web服务器将PHP作为DSO模块在Apache的进程空间中运行,并使用Apache的用户权限。 这可能会影响您的结果(也许是积极的或者可能是消极的)。

在剩下的两个选项中,curl似乎比wget更广泛地部署,因此这将是我的第二选择,尽管它们大致相等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接