![为何我的 cronjob 没有运行?](https://linux22.com/image/593037/%E4%B8%BA%E4%BD%95%E6%88%91%E7%9A%84%20cronjob%20%E6%B2%A1%E6%9C%89%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
/etc/cron.d/mycron
我有一个如下所示的cronjob :
0 3 * * * apache php /path/to/my/script.php
在同一个文件中,其他 cronjobs 开始以 root 和其他用户身份运行(可以工作),但由于某种原因,这个以 apache 身份运行的作业没有运行,也没有在 cron 文件中报告任何内容/var/log/messages
或向其中的MAILTO
地址发送任何内容。当我su apache
运行 cronjob 的命令时,它工作正常,但 cron 不喜欢它。
这对我来说是一个长期存在的问题,到目前为止我已经收集了以下可能性:
- apache 用户没有主目录(其他 cron 用户有),并且 crond 不喜欢这样。
- 有一些 PAM 或
/etc/security/access.conf
设置使用 crond 阻止 apache,尽管/etc/security/access.conf
已被完全注释掉。 - SELinux——当问题看起来非常奇怪时,这通常是罪魁祸首。
对于这个问题有什么想法或经验吗?解决办法是什么?
谢谢
答案1
- 尝试在 cron 配置中使用 php 的完整路径:
/usr/bin/php
- 检查 apache 主目录:
grep apache /etc/passwd
据我所知,用户应该始终有主目录。它可能不在 /home 中。 - 检查有关安全事件的系统日志消息。如果这是 PAM,你会看到一些
- 尝试禁用 SELinux
答案2
必须为用户设置主目录。如果用户没有主目录,您可以直接在 cron.d 文件中指定。
您可能还需要提供 PATH=/usr/bin/,或者为命令指定完整路径。
HOME=/tmp
0 3 * * * apache /usr/bin/php /path/to/my/script.php
答案3
cron
默认情况下运行非常有限PATH
;您需要输入php
二进制文件的完整路径吗?