我已经设置了一个新的 EC2 实例。一切都运转良好。今天早上我已经设置了 cron,下面是 cron 的示例
*/5 * * * * /usr/bin/php https://www.xyz.in/api/cron/index.php
我已经测试了很多次,但我的 cron 不工作。如果我手动点击 cron url 那么它就可以工作。我需要知道是否必须在 EC2 实例中设置任何设置才能运行 cron。
Ubuntu 版本22.04.3
LTS
我已经设置了一个新的 EC2 实例。一切都运转良好。今天早上我已经设置了 cron,下面是 cron 的示例
*/5 * * * * /usr/bin/php https://www.xyz.in/api/cron/index.php
我已经测试了很多次,但我的 cron 不工作。如果我手动点击 cron url 那么它就可以工作。我需要知道是否必须在 EC2 实例中设置任何设置才能运行 cron。
Ubuntu 版本22.04.3
LTS
通过 URL 引用 PHP 脚本,即
https://www...
当将其作为参数传递给本地解释器时,即/usr/bin/php
无法工作,因为解释器不会读取该 PHP 脚本中的代码,而是读取输出(HTML/TEXT/JS ...等)。)由为该脚本/页面提供服务的 Web 服务器...也就是说,如果所使用的解释器/可执行文件可以处理发送和接收 HTTP/S 请求,而这些请求/usr/bin/php
最终可能无法处理,因此 Web 服务器既不会响应也不会口译员会读任何内容。如果你想远程运行服务器上的脚本,请使用eg
/bin/curl "https://www...." >/dev/null 2>1
。...因此,您的 crontab 行应该如下所示:
...应该通过简单地要求 Web 服务器像 Web 浏览器一样提供该页面来在目标服务器上运行目标脚本/页面...确保 URL 不包含任何字符,因为这些字符会
%
中断crontab 中的行除非用 转义\
。>/dev/null
stdout
将重定向命令的输出,/dev/null
从而丢弃它,并将2>1
错误从stderr
tostdout
重定向,从而也丢弃它们......如果你不这样做,你将从 CRON 获得大量错误日志,但是您的命令应该每次都运行...不过,这是一个很好的措施,或者您可以将两者重定向(附加>>
)到自定义日志文件,而不是/dev/null
如果您愿意或喜欢输出>>/path/to/outlog
和错误2>>/path/to/errlog
。