我尝试每 5 分钟调用一次 shell 脚本,以 root 身份执行 php 文件。
# crontab -l
*/5 * * * * /home/regularuser/call.sh
权限:
-rw-rw-rw- 1 root root 162 Jun 6 23:40 call.php
-rwxr-xr-x 1 root root 66 Jun 7 01:20 call.sh
call.sh内容:
#!/bin/bash
php -q /home/regularuser/call.php
echo "request processed"
我的问题是,我的 php 文件无法通过 crontab 执行。但是,如果我调用 call.sh,一切都会正常进行。
我对 crontab 和 shell 脚本还不熟悉,因此欢迎任何建议/资源。
答案1
请记住,Cron 将在极简环境中运行。某些重要内容(如 PATH)可能与您的预期不同。
尝试将命令的输出记录到 syslog,如下所示:
*/5 * * * * /home/regularuser/call.sh 2>&1 | logger -t call.sh
这会将任何 stdout 和 stderr 打印到系统日志中,通常是 /var/log/messages 。从这里,使用“grep call.sh /var/log/messages”查看您的错误,可能只有 1-2 行。
我通常更喜欢记录这样的错误,而不是发送垃圾邮件。但这只适用于短消息。
找到错误消息后,用错误信息更新您的问题。或者,您也许可以自己解决这个问题 ;)
答案2
您确定 php 位于 crontab 已知的 $PATH 上吗?如果您使用完整路径 (/what/ever/bin/php ) 会怎样?
此外,cron 应该将命令的输出发送到您的邮箱。它说了什么?
答案3
也许有助于将路径添加到 crontab 命令。如果此命令找到 php 二进制路径如下:
$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz
使用此命令和路径-在我的情况下是/usr/bin/php:
*/5 * * * * /usr/bin/php -q /home/regularuser/call.php