Я пытаюсь отладить проблему, из-за которой cron не отправляет почту на ящик Centos 6, который я не настраивал. Как я могу определить, какой почтовый клиент cron использует для отправки почты? На странице руководства crontab отчасти сказано следующее:
В дополнение к LOGNAME, HOME и SHELL cron (8) будет проверять MAILTO, если у него есть какие-либо причины для отправки почты в результате выполнения команд в "this" crontab. Если MAILTO определено (и не является пустым), почта отправляется пользователю с таким именем. Если MAILTO определено, но пусто (MAILTO = ""), почта отправляться не будет. В противном случае письмо будет отправлено владельцу crontab. Эта опция полезна, если вы выбрали / bin / mail вместо / usr / lib / sendmail в качестве почтовой программы при установке cron - / bin / mail не использует псевдонимы, а UUCP обычно не читает свою почту.
Часть со звездочками - это та часть, которая заставляет меня задуматься: "Ну, это sendmail или mail?"
Согласно странице руководства для 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:
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
Подключитесь к процессу crond с помощью strace, ища активность, связанную с процессом. Когда strace пишет на stderr, я перенаправляю его на stdout и ищу '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.
Быстрый Google показывает мне, что /etc/sysconfig/crond
это файл, который определяет, какая почтовая программа используется cron.