为什么这个发送电子邮件的命令可以从 shell 运行,但不能作为 cron 作业运行?

为什么这个发送电子邮件的命令可以从 shell 运行,但不能作为 cron 作业运行?

我在使用 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

相关内容