apache crontab 未执行

apache crontab 未执行

我使用 cron 来执行一些 php 脚本(owncloud 后台任务等)。我的服务器通过 php-fpm 运行 nginx 和 PHP,默认情况下,php-fpm 在用户下运行 PHP 进程apache,该用户是除 root 之外唯一具有写权限的用户/var/www。因此,将这些后台作业添加到 apache 的 crontab 中应该没问题:

crontab -u apache -e

内容:

MAILTO=cron@localhost
*  *  *  *  * echo "..." | mail -s "crontest" cron@localhost

这应该每分钟给我发送一封邮件,但是却没有。当我以 apache 用户身份运行该命令时 ( sudo -s -u apache),它工作正常,但 cronjob 从未执行。

我发现有人提到“锁定账户”这里,但我不确定建议的解决方案是否是个好主意。

答案1

我认为分钟数栏中的数字 60 是无效的(如果我错了,请纠正我)。该数字应介于 0 到 59 之间。

您实际上告诉机器要执行的操作是“echo "..." | mail -s "crontest" cron@localhost每 60 分钟运行一次”。如果您希望作业每分钟运行一次,则该行将是:

*/1 * * * * echo "..." | mail -s "crontest" cron@localhost

http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

答案2

好的,/var/log/cron给了我一个线索。

CROND[7709]: (apache) CMD (echo "..." | mail -s "crontest" cron@localhost)
CROND[7709]: (CRON) ERROR chdir failed (/usr/share/httpd): No such file or directory

问题是 cron 尝试切换到用户的主目录在执行任何操作之前。但是,由于我没有安装 apache,所以 /usr/share/httpd 不存在。我猜创建该目录是可行的,但使用 sudo 作为 root 应该是更好的解决方案。

* * * * * sudo -u apache env TERM=xterm php -f /var/www/owncloud/cron.php

env TERM=xterm避免来自 cron 的警告。

相关内容