Перезапуск 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 | Смена портов прокси, сертификата |
| zmconfigd | zmconfigdctl restart | Если изменения конфигурации не применяются к службам |
| LDAP | ldap 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 …(порог в мегабайтах задаёт параметр localconfigzimbra_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! | Команда запущена от root | su - zimbra |
zmcontrol: command not found | su zimbra без дефиса, нет PATH | su - zimbra или полный путь /opt/zimbra/bin/zmcontrol |
| Служба mailbox в статусе Stopped | Ошибка JVM, нехватка памяти, LDAP недоступен | Смотреть zmmailboxd.out и mailbox.log |
| mta Failed при старте | Порт 25 занят другим MTA, ошибка в конфиге Postfix | ss -tlnp, /var/log/zimbra.log |
Частые вопросы
Чем zmcontrol restart отличается от перезагрузки сервера?
Перезапускаются только службы Zimbra, система и другие программы не затрагиваются. После перезагрузки сервера Zimbra стартует сама через /etc/init.d/zimbra.
Можно ли перезапустить только веб-интерфейс?
Веб-клиент работает внутри mailboxd, поэтому достаточно zmmailboxdctl restart. Почта по SMTP в это время продолжит приниматься MTA и доставится, когда mailboxd поднимется.
Как управлять службами на другом сервере многосерверной установки?
У zmcontrol есть ключ -H с именем хоста, но я предпочитаю зайти на нужный узел и выполнить команды локально — так видно вывод и логи. Если Zimbra вы только планируете, сравните её с альтернативами в обзоре собственного почтового сервера.