私が設定していないCentos 6ボックスでcronがメールを送信しない問題をデバッグしようとしています。 cronがメールの送信に使用しているメーラーを判別するにはどうすればよいですか? crontabのmanページには、次のように書かれています。
LOGNAME、HOME、Shellに加えて、cron(8)は、「this」crontabでコマンドを実行した結果、メールを送信する理由がある場合にMAILTOを調べます。 MAILTOが定義されている(空でない)場合、その名前のユーザーにメールが送信されます。 MAILTOが定義されているが空(MAILTO = "")の場合、メールは送信されません。それ以外の場合は、crontabの所有者にメールが送信されます。 このオプションは、cronをインストールするときにメーラーとして/ usr/lib/sendmailではなく/ bin/mailを選択した場合に役立ちます-/ bin/mailはエイリアスを行わず、UUCPは通常は読み取りませんそのメール。
アスタリスクが付いている部分は、「そうですか、sendmailかmailですか?」
簡単なGoogleは/etc/sysconfig/crond
は、cronが使用するメーラーを定義するファイルです。
Cron(8)(実際にメッセージを送信するデーモン)のmanページによると:
-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
[email protected]
*/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にリダイレクトし、 'mail'を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
はい、sendmailです。