我使用以下命令创建了文件 crontab.custom:
*/1 * * * * /home/username/data/www/run.sh
并run.sh
包含:
php script.php
之后我运行这个命令crontab crontab.custom
。
现在crontab -l
返回我的任务。
我用 重新启动了 cron /etc/rc.d/cron restart
,但script.php
没有被调用。我应该怎么做才能让它发挥作用?
答案1
这可能是因为你的$PATH
没有设置。当您尝试php
在 shell 中执行时,实际上,它会php
从您的 中查找 的绝对目的地$PATH
,这是从中查找可执行文件的目录列表。这是在您的环境中设置的,但 cron 不共享该环境(事实上,它可能有一个空或未设置$PATH
)。有几种解决方案(从最好到最差):
$PATH
通过在其顶部添加类似内容来设置您的 crontab :
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
使用脚本中可执行文件的完整路径
php
(这很糟糕,用户应该能够覆盖环境中的 PATH 以根据需要使用不同的二进制文件);$PATH
在脚本中明确设置(出于同样的原因不好)。
答案2
将以下行添加到 shell 脚本的顶部,如下所示
#!/bin/bash
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
export PATH
然后使用 cron 作业
crontab -e
答案3
crontab 文件的问题往往与在 cron 下运行时的不同环境有关。由于您尚未提供该文件run.sh
,因此以下是一些故障排除提示:
- 作为您自己,
/home/username/data/www/run.sh
在命令行中输入并确保它有效 - 确保所有路径在脚本中显式设置为完整路径
- 确认您已将数据添加到正确的位置 -
crontab -e
允许您编辑 crontab 文件 - 确保您有权使用 cron。你的用户名必须在
/var/cron/allow
文件中并且不在/var/cron/deny
文件中 - 检查 /var/log/cron 的输出