Crontab + .sh + php

Crontab + .sh + php

我尝试每 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

相关内容