
На всех компьютерах sendmail работает отлично, за исключением одного.
У всех одинаковые настройки папки конфигурации /etc/mail, я использовал rsync, чтобы убедиться, что они все совпадают.
Обычно эта команда работает нормально...
sendmail -t < мой-файл-электронной-почты.eml
Но на этом компьютере (все работают под управлением Ubuntu 20.04) процесс просто зависает.
Я попробовал "sendmail -t", который позволяет мне составлять письмо прямо из командной строки. Я нажимаю CTRL+D, но ничего не происходит. Я попробовал использовать команду "mail[email protected]" и смог написать, но когда я дохожу до строки cc:, оно зависает. Нажатие CTRL+Z выводит меня из состояния ожидания, и в конце концов письмо отправляется.
Что происходит, что заставляет sendmail/mail зависать в конце файла?
Похоже, нет способа полностью удалить и переустановить. Я попробовал "apt-get purge sendmail", и система говорит, что он удален, но ввод sendmail в командной строке все равно переводит меня в режим текстового редактора и все еще отправляет почту. А "whereis sendmail" все еще показывает его в /usr/sbin
Я просто не могу понять, что здесь происходит. Почему зависает на EOF? И почему только на этом одном компьютере?
Спасибо!
---- ОБНОВЛЕНИЕ ---- Я действительно не знаю, как читать вывод strace, но это было предложено. Вывод выглядит в основном одинаково на всех машинах, а эта часть является хвостом...
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
sendto(3, "<18>May 6 12:27:19 sendmail[265"..., 120, MSG_NOSIGNAL, NULL, 0) = 120
write(2, "Program mode requires special pr"..., 69Program mode requires special privileges, e.g., root or TrustedUser.
) = 69
alarm(0) = 0
rt_sigprocmask(SIG_UNBLOCK, [ALRM], [], 8) = 0
getpid() = 26521
setuid(1000) = 0
exit_group(78) = ?
+++ exited with 78 +++
Но на одном компьютере, который завис, все останавливается здесь, на clock_nanosleep, которого нет на других.
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = 0
sendto(3, "<18>May 6 12:27:57 sendmail[688"..., 100, MSG_NOSIGNAL, NULL, 0) = 100
clock_nanosleep(CLOCK_REALTIME, 0, {tv_sec=60, tv_nsec=0},
Вот некоторая информация об sendmail на этом сервере:
$ which sendmail
/usr/sbin/sendmail
$ ls -l $(which sendmail)
lrwxrwxrwx 1 root root 26 Feb 3 15:51 /usr/sbin/sendmail -> /etc/alternatives/sendmail
$ ls -l /etc/alternatives/sendmail
lrwxrwxrwx 1 root root 30 May 6 06:39 /etc/alternatives/sendmail -> /usr/libexec/sendmail/sendmail
Конечная точка на других серверах заканчивается на /usr/lib/sm.bin/sendmail, но я не уверен, почему на ноутбуке с этой проблемой она заканчивается на libexec/sendmail, поскольку все они работают под управлением Ubuntu 22.04.
решение1
Я только что спустился в эту червоточину с той же 60-секундной задержкой.
У меня не было syslogd, но после его установки это появилось в /var/log/messages
May 12 17:52:43 myhost mail.crit sendmail[6955]: My unqualified host name (myhost) unknown; sleeping for retry
May 12 17:52:47 myhost mail.crit sendmail[6960]: My unqualified host name (myhost) unknown; sleeping for retry
May 12 17:52:52 myhost mail.crit sendmail[6974]: My unqualified host name (myhost) unknown; sleeping for retry
Попробуйте изменить имя хоста (и /etc/hosts) на полное доменное имя — myhost.localdomain или что-то подобное.