我在使用 cron 作业时遇到问题,我需要向用户发送电子邮件通知,我使用此命令
curl "http://example.com/index.php?option=com_community&task=cron">/dev/null 2>&1
当我在 shell 中运行此命令时,它可以工作,并且会发送电子邮件,但是当我尝试设置 cron 作业时,它不会发送电子邮件:
这是我的 /etc/cron.d:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
05,45 * * * * root run-parts /etc/cron.hourly
它应该运行 /etc/cron.hourly cron 作业,这里是 /etc/cron.hourly/0anacron:
#!/bin/bash
# Skip excecution unless the date has changed from the previous run
if test -r /var/spool/anacron/cron.daily; then
day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
exit 0;
fi
# Skip excecution unless AC powered
if test -x /usr/bin/on_ac_power; then
/usr/bin/on_ac_power &> /dev/null
if test $? -eq 1; then
exit 0
fi
fi
/usr/sbin/anacron -s
curl "http://example.com/index.php?option=com_community&task=cron">/dev/null 2>&1
这是 cron 日志,它显示 cron 作业正在运行
Aug 2 16:45:01 u17669867 CROND[3164]: (root) CMD (run-parts /etc/cron.hourly)
Aug 2 16:45:01 u17669867 run-parts(/etc/cron.hourly)[3164]: starting 0anacron
Aug 2 16:45:01 u17669867 run-parts(/etc/cron.hourly)[3173]: finished 0anacron
也许 /etc/cron.hourly/0anacron 有问题?
答案1
您是否将代码直接附加到0anacron
文件中?
这就是问题所在;不要这么做。
检查 anacron 的手册页:
Anacron 可用于定期执行命令,频率以天为单位。与 cron(8) 不同,它不假设机器连续运行。
exited 0
显然,这与您在处理电子邮件时所想的无关,如果您检查脚本,您会发现在执行任务之前很有可能脚本就已经完成了。
无论如何,尝试把你的
curl "http://example.com/index.php?option=com_community&task=cron">/dev/null 2>&1
在名为 的文件中/etc/cron.hourly/1send_emails
。将其更改为 root 并使其可执行。
该文件将按小时运行,并且应以类似于 anacron 作业的方式记录在您的 cron 日志中。
如果您想指定自己的 cron 表达式,或者以不同于 root 的用户身份运行,请将类似的文件放在以 cron 表达式为前缀的行上,并将要运行的用户设置为在要运行的作业之前运行/etc/cron.d
。