Debain cron 帮助访问 URL

Debain cron 帮助访问 URL

文档说我需要:

如果你的托管账户在 LINUX/UNIX 系统上,你可以设置一个 CRON 任务来指向此 URL http://yourUrlToThisScript.com/cron.php?cron=do&d=31

尽管这是他们给出的有关如何设置 cron 的唯一信息。但我知道脚本运行正常,因为当我通过浏览器访问 URL 时,我会收到电子邮件。

  1. 我看了几个例子并尝试阅读手册:执行 PHP 文件并得出了以下结论: */1 * * * * /usr/bin/php -q /var/www/website/public/domain-manager/cron.php cron=do&d=31 >/dev/nul

虽然这不起作用并且我没有收到任何电子邮件或错误?

  1. 我该如何保护此文件cron.php,使其无法通过浏览器执行?也许可以这个答案尽管是针对单个文件而不是目录。

答案1

调用 PHP 脚本的方式以及它处理给定参数的方式略有不同。文档是关于 HTTP GET 请求的,而您正在执行 PHP 脚本的命令行调用。

通过命令行执行的 HTTP GET 请求示例:

wget -q -O  - "http://localhost/domain-manager/cron.php?cron=do&d=31"

通过命令行执行PHP脚本的示例:

php -f /var/www/website/public/domain-manager/cron.php cron=do d=31

主要区别在于 PHP 如何获取参数。对于 HTTP 请求,PHP 将使用 Apache 或您正在使用的任何 Web 服务器的接口,并在 $_GET 数组中获取参数。对于命令行调用,PHP 必须使用 $argv 数组。

如果文档需要 HTTP 调用,我会使用它,即使出于性能原因命令行调用会更好并且没有这样的限制。

针对您的 crontab 的建议:

*/2 * * * * wget -q -O  - "http://localhost/domain-manager/cron.php?cron=do&d=31" > /dev/null 2>&1

保护此文件免受外部请求的建议:/var/www/website/public/domain-manager/.htaccess 的内容(在同一目录中)

<files cron.php>
order deny,allow
deny from all
allow from localhost
</files>

相关内容