Debain cron 帮助访问 URL

Joh*_*lia 0 php debian cron

文档说我需要:

如果您的主机帐户在 LINUX/UNIX 系统上,您可以设置 CRON 作业以指向此 URL http://yourUrlToThisScript.com/cron.php?cron=do&d=31

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

  1. 我查看了几个示例并尝试阅读手册:Executing PHP files并提出: */1 * * * * /usr/bin/php -q /var/www/website/public/domain-manager/cron.php cron=do&d=31 >/dev/nul

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

  1. 如何保护此文件cron.php使其无法从浏览器执行?虽然对于单个文件而不是目录,但可能类似于这个答案

Jen*_*ler 5

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

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

wget -q -O  - "http://localhost/domain-manager/cron.php?cron=do&d=31"
Run Code Online (Sandbox Code Playgroud)

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

php -f /var/www/website/public/domain-manager/cron.php cron=do d=31
Run Code Online (Sandbox Code Playgroud)

主要区别在于 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
Run Code Online (Sandbox Code Playgroud)

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

<files cron.php>
order deny,allow
deny from all
allow from localhost
</files>
Run Code Online (Sandbox Code Playgroud)