我已经设置了一个新的 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
答案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/null
stdout
将把命令的输出重定向到/dev/null
从而丢弃它,并将2>1
错误从 重定向stderr
到stdout
从而也丢弃它们...如果不这样做,您将从 CRON 获得大量错误日志,但您的命令每次都应该运行...这是一个很好的措施,或者您可以将>>
两者重定向(附加到)到自定义日志文件,而不是/dev/null
如果您愿意,或者喜欢输出>>/path/to/outlog
和错误2>>/path/to/errlog
。