Centos

cron 使用什麼郵件程序發送郵件?

  • October 8, 2014

我正在嘗試調試 cron 未在我未配置的 Centos 6 機器上發送郵件的問題。如何確定使用哪個 mailer 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?”的部分。

一個快速的Google向我展示了/etc/sysconfig/crond這個文件,它定義了 cron 使用的郵件程序。

根據 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 以獲取“郵件”:

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

是的,它是發送郵件。

引用自:https://serverfault.com/questions/632250