Skip to main content

Services

If a service is not running, work through the commands below to identify the cause.

note

The examples below use msh-zr-milter as the target service. The same commands apply to msh-zr-web - replace msh-zr-milter with msh-zr-web throughout.

Check the current status of the service.

systemctl status msh-zr-milter.service

The Active: line shows the current state. active (running) means the service is healthy. activating (auto-restart) means systemd is repeatedly restarting the service because it exits too quickly - investigate the logs below to find out why. Both units are configured with Restart=always, so a failing service restarts every few seconds until the cause is fixed.

● msh-zr-milter.service - MSH Zimbra Rules (milter)
Loaded: loaded (/etc/systemd/system/msh-zr-milter.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-05-08 10:48:54 CDT; 1min 20s ago
Main PID: 2604 (msh-zr-milter)
CGroup: /system.slice/msh-zr-milter.service
├─2604 /bin/bash /opt/msh-zr/bin/msh-zr-milter
└─2642 /usr/bin/java -Xms128M -Xmx1024M -Dfile.encoding=UTF8 -jar /opt/msh-zr/bin/jar/msh-zr-milter.jar ...

If the unit is reported as not-found or masked, the unit files were never linked - see Server installation for the systemctl link and daemon-reload steps.

View the systemd journal to see when the service started and stopped, and why. Launcher errors (Java checks) and application output both reach the journal.

sudo journalctl -u msh-zr-milter.service

Common launcher errors in the journal:

  • Java <version> detected. Java 21+ is required. - the resolved Java is too old; see Java.
  • MSH_JAVA_BIN ('...') does not point to a valid executable. - Java is missing or the configured path is wrong; see Java.

Read the launcher console log to see what the service printed before it exited. The same lines that reach the journal are appended here.

sudo cat /opt/msh-zr/var/log/milter.out

(for the web service: /opt/msh-zr/var/log/web.out)

For the milter, the structured application log has more detail:

sudo cat /opt/msh-zr/var/log/msh-zr-milter.log

If the logs show permission errors (cannot write to var/log, cannot open the database), the file ownership is wrong - re-apply it and restart:

sudo sh /opt/msh-zr/lib/fixperms.sh
sudo systemctl restart msh-zr-milter.service msh-zr-web.service

Additional resources

  • Logs - what every file in var/log contains
  • Java - Java version and memory problems