[Unit] Description=emqx daemon After=network.target [Service] User=emqx Group=emqx # The ExecStart= is foreground, so 'simple' here Type=simple Environment=HOME=/var/lib/emqx # log to file by default (if no log handler config) Environment=EMQX_DEFAULT_LOG_HANDLER=file # Start 'foreground' but not 'start' (daemon) mode. # Because systemd monitor/restarts 'simple' services ExecStart=/bin/bash /usr/bin/emqx foreground # Give EMQX enough file descriptors LimitNOFILE=1048576 # ExecStop is commented out so systemd will send a SIGTERM when 'systemctl stop'. # SIGTERM is handled by EMQX and it then performs a graceful shutdown # emqx stop will ping node, always return 0 to make sure next command will be executed ExecStop=/bin/bash -c '/usr/bin/emqx stop; exit 0' # If the process is still running, force kill it ExecStop=/bin/bash -c 'if [ ps -p $MAINPID >/dev/null 2>&1 ]; then kill -15 $MAINPID; fi' # Wait long enough before force kill for graceful shutdown TimeoutStopSec=120s Restart=on-failure # Do not restart immediately so the peer nodes in the cluster have # enough time to handle the 'DOWN' events of this node RestartSec=120s [Install] WantedBy=multi-user.target