Cron 在新的 EC2 实例中不起作用。如果手动运行,则它可以正常工作

Cron 在新的 EC2 实例中不起作用。如果手动运行,则它可以正常工作

我已经设置了一个新的 EC2 实例。一切都运行正常。今天早上我设置了 cron,下面是 cron 的示例

*/5 * * * * /usr/bin/php https://www.xyz.in/api/cron/index.php 

我已经测试了很多次,但我的 cron 不起作用。如果我手动点击 cron url,它就会工作。我需要知道是否必须在 EC2 实例中设置任何设置才能运行 cron。

Ubuntu 版本22.04.3LTS

答案1

通过 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 行应该看起来像这样:

*/5 * * * * /bin/curl "https://www.xyz.in/api/cron/index.php" >/dev/null 2>1

... 应该通过简单地要求 Web 服务器像 Web 浏览器那样提供该页面来在目标服务器上运行目标脚本/页面...确保 URL 不包含任何%字符,因为除非使用 转义,否则这些字符会在 crontab 中换行\

>/dev/nullstdout将把命令的输出重定向到/dev/null从而丢弃它,并将2>1错误从 重定向stderrstdout从而也丢弃它们...如果不这样做,您将从 CRON 获得大量错误日志,但您的命令每次都应该运行...这是一个很好的措施,或者您可以将>>两者重定向(附加到)到自定义日志文件,而不是/dev/null如果您愿意,或者喜欢输出>>/path/to/outlog和错误2>>/path/to/errlog

相关内容