【问题标题】:Cronjob script call: PHP interpreter (CLI), curl or wget?Cronjob 脚本调用:PHP 解释器 (CLI)、curl 还是 wget?
【发布时间】:2016-06-06 12:52:05
【问题描述】:

假设我想定期执行PHP 脚本,例如。 /home/user/refresh.php,我看到了几个设置 cronjob 的选项:

# Option A: PHP interpreter
*/15 * * * * php-cgi /home/user/refresh.php

# Option B: curl
*/15 * * * * curl -L -s 'http://host.com/refresh.php'

# Option C: wget
*/15 * * * * wget -q --spider http://host.com/refresh.php

除了 PHP 不需要 URL 之外,还有什么区别?是否有性能考虑? 通常哪种方式最好?我发现的唯一问题regarding this matter 没有很详细,我想建立一些良好的习惯或最佳实践。

【问题讨论】:

  • 这里有一个明确的答案:视情况而定。您的脚本是否需要适当的 CGI 环境 ($_SERVER vars),或者是否与 Web 调用完全分开?如果是这样,最好直接调用口译员。否则 wget/curl 没有任何区别(事实上,netcat 可以)。
  • 如果是我并且这个脚本应该是私有的,我会将它存储在 web 根目录之外 并使用 Option A 来确保只有我自己在使用它,如果它是私有的,那么将它暴露给公共网络是没有意义的。您永远不知道 Google bot 是否会将其编入索引!
  • 标题显示“CLI”,但 crontab 摘录使用“php-cgi”。标题是对的。如果您将其作为命令行运行,请不要使用 CGI 版本的 PHP。使用 CLI 版本;它可能在您的系统上称为php

标签: php curl cron wget


【解决方案1】:

主要区别在于调用脚本的用户帐户的安全访问权限。对于示例 B 和 C,安全上下文作为 Web 服务器用户帐户执行。对于 A,它属于 crontab 所有者。如果您将选项 A 与此脚本的专用帐户一起使用,那么您将获得更精细的访问控制,因为网络服务器可能有其他安全约束要求/扩展访问权限。

其次,由于您将此脚本托管在http://example.com 的网络服务器上,因此您已经打开了更多访问权限来触发该脚本。如果希望提供更方便的访问来运行脚本,那么这很好。否则,它不仅不安全,而且效率也不高,因为如果它还没有被用于其他目的,那么运行主动监听的 Web 服务器也会产生内存/处理器开销。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 2017-03-04
    • 2015-04-18
    • 1970-01-01
    • 2011-08-11
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多