Centos
cron 使用什麼郵件程序發送郵件?
我正在嘗試調試 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
是的,它是發送郵件。