Главная » Почтовые серверы » Перезапуск Zimbra: zmcontrol и отдельные службы

Перезапуск Zimbra: zmcontrol и отдельные службы

Перезапуск Zimbra нужен после правки конфигурации, замены сертификата, обновления или когда веб-интерфейс перестал отвечать. Все службы Zimbra — LDAP, MTA, mailboxd, proxy, антиспам и остальные — управляются одной утилитой zmcontrol, и запускать её можно только от пользователя zimbra.

Коротко: su - zimbra, затем zmcontrol restart. Для остановки, запуска и проверки — zmcontrol stop, zmcontrol start, zmcontrol status. Если нужна одна служба, используйте её собственную команду: zmmailboxdctl, zmmtactl, zmproxyctl, zmconfigdctl. Команды проверены по исходникам Zimbra и актуальны для Zimbra 9 и 10.

Полный перезапуск через zmcontrol

su - zimbra
zmcontrol restart

Важен именно su - zimbra (с дефисом): так подгружается окружение пользователя, и /opt/zimbra/bin оказывается в PATH. Если запустить zmcontrol от root, утилита сразу завершится с сообщением Run as the zimbra user!. Одной строкой от root:

su - zimbra -c "zmcontrol restart"

Остальные команды:

zmcontrol stop      # синоним shutdown — остановить все службы
zmcontrol start     # синоним startup — запустить все службы
zmcontrol status    # состояние служб: Running / Stopped
zmcontrol -v        # версия Zimbra

zmcontrol запускает службы в фиксированном порядке: сначала ldap, затем zmconfigd, mailbox, memcached, proxy, amavis, антиспам и антивирус, opendkim, mta, stats. Останавливает тоже по своему списку. Поэтому для полного перезапуска не нужно вручную дёргать каждую службу. Полный рестарт занимает несколько минут — всё это время почта не принимается и веб-интерфейс недоступен, так что на рабочем сервере я планирую его вне рабочего дня.

Перезапуск через systemd

При установке Zimbra копирует скрипт /opt/zimbra/libexec/zimbra в /etc/init.d/zimbra. На дистрибутивах с systemd он виден как юнит zimbra.service через совместимость с SysV-скриптами, поэтому от root работает так:

systemctl restart zimbra
systemctl status zimbra

Внутри скрипт делает runuser -l zimbra -c "zmcontrol …", то есть результат тот же. Именно этот скрипт поднимает Zimbra при загрузке сервера. Подробный вывод по службам удобнее смотреть через zmcontrol status.

Перезапуск отдельных служб

Если поменяли настройку одной подсистемы, перезапускать всё не нужно. Все команды выполняются от пользователя zimbra:

СлужбаКомандаКогда нужна
mailboxd (Jetty: веб-клиент, IMAP/POP3 бэкенд, SOAP)zmmailboxdctl restartИзменения атрибутов, которые требуют перезапуска mailbox, зависший веб-интерфейс
MTA (Postfix, amavis, saslauthd)zmmtactl restartПравки параметров Postfix через zmprov/postconf
Proxy (nginx)zmproxyctl restartСмена портов прокси, сертификата
zmconfigdzmconfigdctl restartЕсли изменения конфигурации не применяются к службам
LDAPldap stop / ldap startОбслуживание LDAP; остальные службы без него не работают

Почти у всех этих скриптов есть также start, stop, reload и status. Например, zmmailboxdctl status быстро покажет, жив ли mailboxd.

Если служба не запускается

Сначала посмотрите, что именно не поднялось:

zmcontrol status

При запуске zmcontrol пишет по каждой службе Done. или Failed. с текстом ошибки. Дальше — в логи:

  • /opt/zimbra/log/mailbox.log — основной лог mailboxd: ошибки авторизации, LDAP, базы, RemoteManager;
  • /opt/zimbra/log/zmmailboxd.out — вывод Java при старте; сюда попадают ошибки запуска JVM и нехватка памяти;
  • /var/log/zimbra.log — системный лог Zimbra: Postfix, amavis, LDAP, служебные скрипты;
  • /opt/zimbra/log/nginx.log — ошибки прокси.
tail -n 100 /opt/zimbra/log/mailbox.log
tail -f /var/log/zimbra.log

Что я проверяю в первую очередь:

  • Место на диске. df -h /opt. При нехватке места zmcontrol start выводит предупреждение WARNING: Disk space below threshold for … (порог в мегабайтах задаёт параметр localconfig zimbra_disk_threshold).
  • LDAP и имя хоста. Если LDAP не поднялся, zmcontrol не может получить список включённых служб и может написать Unable to determine enabled services. Проверьте ldap status, а также что zmhostname совпадает с hostname -f и имя резолвится в адрес сервера.
  • Занятые порты. Если на сервере успели поставить отдельный nginx, Apache или Postfix из системных пакетов, они займут 25, 80, 443 порты: ss -tlnp.
  • Сертификаты. Просроченный или неверно развёрнутый сертификат может мешать запуску proxy и подключению служб к LDAP. Проверить: zmcertmgr viewdeployedcrt.

Проблемы с SSH-доступом между службами Zimbra дают отдельную ошибку — разбор в статье Zimbra: exception during auth RemoteManager.

СимптомПричинаРешение
Run as the zimbra user!Команда запущена от rootsu - zimbra
zmcontrol: command not foundsu zimbra без дефиса, нет PATHsu - zimbra или полный путь /opt/zimbra/bin/zmcontrol
Служба mailbox в статусе StoppedОшибка JVM, нехватка памяти, LDAP недоступенСмотреть zmmailboxd.out и mailbox.log
mta Failed при стартеПорт 25 занят другим MTA, ошибка в конфиге Postfixss -tlnp, /var/log/zimbra.log

Частые вопросы

Чем zmcontrol restart отличается от перезагрузки сервера?

Перезапускаются только службы Zimbra, система и другие программы не затрагиваются. После перезагрузки сервера Zimbra стартует сама через /etc/init.d/zimbra.

Можно ли перезапустить только веб-интерфейс?

Веб-клиент работает внутри mailboxd, поэтому достаточно zmmailboxdctl restart. Почта по SMTP в это время продолжит приниматься MTA и доставится, когда mailboxd поднимется.

Как управлять службами на другом сервере многосерверной установки?

У zmcontrol есть ключ -H с именем хоста, но я предпочитаю зайти на нужный узел и выполнить команды локально — так видно вывод и логи. Если Zimbra вы только планируете, сравните её с альтернативами в обзоре собственного почтового сервера.