Назад | Перейти на главную страницу

Почта без причины застряла в очереди exim?

На моем сервере почта иногда задерживается явно без какой-либо конкретной причины.

В этом примере два письма были созданы systemd-cron о сбоях cron:

mailq вывод (домены отредактированы):

 3m  1.9K 1i6W6d-0003UT-Ut <server@example.com>
          www-data@server

 3m  1.8K 1i6W6e-0003Uh-1y <server@example.com>
          root@server

Через несколько минут или когда я выдаю exim -qf наконец, письмо отправлено и доставлено без каких-либо проблем.

/var/log/exim4/mainlog (Домены / IP-адреса отредактированы):

2019-09-07 10:30:04 1i6W6d-0003UT-Ut <= server@example.com U=nobody P=local S=1914
2019-09-07 10:30:04 1i6W6e-0003Uh-1y <= server@example.com U=nobody P=local S=1875
2019-09-07 10:34:13 Start queue run: pid=13447 -qf
2019-09-07 10:34:14 1i6W6d-0003UT-Ut => me@example.com <www-data@server> R=smarthost T=remote_smtp_smarthost H=smtp.example.com [1.2.3.4] X=TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="…" A=plain C="250 2.0.0 Ok: queued as 268D26139FAA"
2019-09-07 10:34:14 1i6W6d-0003UT-Ut Completed
2019-09-07 10:34:14 1i6W6e-0003Uh-1y => me@example.com <root@server> R=smarthost T=remote_smtp_smarthost H=smtp.example.com [1.2.3.4] X=TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="…" A=plain C="250 2.0.0 Ok: queued as BA7EE6139FAC"
2019-09-07 10:34:14 1i6W6e-0003Uh-1y Completed
2019-09-07 10:34:14 End queue run: pid=13447 -qf

Когда я отправил электронное письмо из командной строки echo 'Test' | mail -s test root, почта доставляется немедленно, без записей журнала для запуска / завершения очереди:

2019-09-07 10:35:21 1i6WBk-0003V9-VR <= server@example.com U=root P=local S=397
2019-09-07 10:35:21 1i6WBk-0003V9-VR => me@example.com <root@server> R=smarthost T=remote_smtp_smarthost H=smtp.example.com [1.2.3.4] X=TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="…" A=plain C="250 2.0.0 Ok: queued as 723116139F77"
2019-09-07 10:35:21 1i6WBk-0003V9-VR Completed

Вы знаете причину задержки? Как я могу заставить exim обрабатывать всю почту немедленно?

Моя конфигурация:

/etc/exim4/update-exim4.conf.conf:

dc_eximconfig_configtype='smarthost'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1 ; ::1'
dc_readhost='server'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.example.com::587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='maildir_home'

Видимо, такая ситуация вызвана сочетанием exim и systemd как описано в списке рассылки systemd-devel.

TL; DR: для отправки почты из командной строки exim запускает процесс для немедленной доставки почты. Однако, поскольку родительский процесс существует, модуль systemd для этого задания cron завершает работу, а systemd завершает работу всех оставшихся процессов в группе управления, включая ранее разветвленный процесс, ответственный за доставку почты.

Чтобы предотвратить это, я нашел два решения (помимо исправления самого exim):

  • Использование SMTP-клиента для отправки почты через TCP локальному демону exim, например swaks(1).
  • Отложить конец модуля systemd, например, позвонив exim -qf (очистка очереди) после звонка mail.

Оба решения не оптимальны. Первый требует дополнительного программного обеспечения и открывает локальное TCP-соединение, а второй требует привилегий root. А пока я буду придерживаться swaks.

Почта может застрять в очереди exim из-за какой-то ошибки, например, сбоя разрешения DNS. И если вы используете Gmail, это может быть вызвано политиками обратного DNS IPv6 (записи PTR) Google, так как тктеун упомянул в своем ответе Вот. Итак, решение - отключить поиск IPv6 для SMTP-сервера Google.

Если вы используете 'разделенную' конфигурацию exim, просто сделайте это как root:

echo "dns_ipv4_lookup = *google.com : *gmail.com" > /etc/exim4/conf.d/main/90_exim4-gmail_disable_ipv6
update-exim4.conf
systemctl restart exim4