cron使用什么邮件发送邮件?


11

我正在尝试调试cron在未配置的Centos 6机器上不发送邮件的问题。如何确定正在使用哪个邮寄程序cron发送邮件?crontab手册页对此有部分说明:

除了LOGNAME,HOME和SHELL外,如果在“ this” crontab中运行命令导致cron(8)有任何理由发送邮件,它还会查看MAILTO。如果定义了MAILTO(并且是非空的),则将邮件发送给如此命名的用户。如果定义了MAILTO但为空(MAILTO =“”),则不会发送任何邮件。否则,邮件将发送到crontab的所有者。 如果在安装cron时决定将/ bin / mail而不是/ usr / lib / sendmail作为邮件程序使用,则此选项很有用– / bin / mail不做别名,并且UUCP通常不读取其邮件。

带星号的部分是让我想知道“是sendmail还是mail?”的部分。

Answers:


3

一个快速的Google向我显示了/etc/sysconfig/crond该文件,该文件定义了cron使用的邮件程序。


我的Google-fu显然很糟糕,因为我花了大量时间寻找它。谢谢。
cbmanica 2014年

23

根据cron(8)(实际发送消息的守护程序)的手册页:

   -m     This  option  allows you to specify a shell command string to use for 
          sending cron mail output instead of sendmail(8).  This command must 
          accept a fully formatted mail message (with headers) on stdin and send
          it as a mail message to the recipients specified in the mail headers.

这使我相信默认情况下使用的是sendmail。让我们用strace进行验证:

设置将生成电子邮件的cron作业:

user@host1 ~:
$ crontab -e
crontab: installing new crontab
user@host1 ~:
$ crontab -l
MAILTO=example@example.com
*/5 * * * * echo "testing"

现在找到crond的进程ID:

user@host1 ~:
$ ps auxww | grep crond
root      9684  0.0  0.0 117280  1296 ?        Ss   Jul22   0:17 crond
user     36344  0.0  0.0 103240   884 pts/2    S+   23:01   0:00 grep crond

使用strace附加到crond进程,查找与进程相关的活动。当strace写入stderr时,我已将其重定向到stdout并grepped为'mail':

root@host1 ~:
# strace -fp 9684 -s 1024 -e trace=process 2>&1 | grep mail
[pid 36204] execve("/usr/sbin/sendmail", ["/usr/sbin/sendmail", "-FCronDaemon", "-i", "-odi", "-oem", "-oi", "-t", "-f", "root"], [/* 16 vars */]) = 0
^C

是的,这是sendmail。


4
在您测试的系统上。
mfinni 2014年

3
正确,它是CentOS在此问题上标记的默认配置。
yoonix 2014年

2
我知道我在这里敲打累了的鼓,但这是一个可配置的参数,问题涉及到问询者未设置的系统。对于该系统,以前可能已将邮件程序从默认值更改。询问者知道默认值。
mfinni 2014年

6
正确,但是在默认配置下,配置文件中没有任何引用邮件的内容(减去注释,整个内容为CRONDARGS=)。它是可配置的,这就是为什么我包含了验证自己的步骤的原因。
yoonix 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.