Skip to content

Running as a service

Set up rChat server to start automatically on boot and restart on failure.


Create the service file:

Terminal window
sudo nano /etc/systemd/system/rchat-server.service
[Unit]
Description=rChat Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/rchat-server --config /etc/rchat/server.toml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
# Redirect logs to journal
StandardOutput=journal
StandardError=journal
SyslogIdentifier=rchat-server
[Install]
WantedBy=multi-user.target

Enable and start:

Terminal window
sudo systemctl daemon-reload
sudo systemctl enable rchat-server
sudo systemctl start rchat-server

Check status:

Terminal window
sudo systemctl status rchat-server

View logs:

Terminal window
sudo journalctl -u rchat-server -f

ActionCommand
Startsudo systemctl start rchat-server
Stopsudo systemctl stop rchat-server
Restartsudo systemctl restart rchat-server
Reload configsudo systemctl reload rchat-server
View logssudo journalctl -u rchat-server -f
Disable autostartsudo systemctl disable rchat-server

If using Let’s Encrypt, add a deploy hook to reload rChat when the certificate renews:

Terminal window
sudo nano /etc/letsencrypt/renewal-hooks/deploy/rchat-reload.sh
#!/bin/bash
systemctl reload rchat-server 2>/dev/null || systemctl restart rchat-server
Terminal window
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/rchat-reload.sh

Test the renewal process:

Terminal window
sudo certbot renew --dry-run

Create /usr/local/etc/rc.d/rchat_server:

#!/bin/sh
# PROVIDE: rchat_server
# REQUIRE: NETWORKING
# KEYWORD: shutdown
. /etc/rc.subr
name="rchat_server"
rcvar="rchat_server_enable"
command="/usr/local/bin/rchat-server"
command_args="--config /usr/local/etc/rchat/server.toml"
pidfile="/var/run/rchat-server.pid"
load_rc_config $name
run_rc_command "$1"
Terminal window
chmod +x /usr/local/etc/rc.d/rchat_server
echo 'rchat_server_enable="YES"' >> /etc/rc.conf
service rchat_server start

Create /Library/LaunchDaemons/io.rchat.server.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>io.rchat.server</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/rchat-server</string>
<string>--config</string>
<string>/usr/local/etc/rchat/server.toml</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/rchat-server.log</string>
<key>StandardErrorPath</key>
<string>/var/log/rchat-server.log</string>
</dict>
</plist>

Load and start:

Terminal window
sudo launchctl load /Library/LaunchDaemons/io.rchat.server.plist
sudo launchctl start io.rchat.server

View logs:

Terminal window
tail -f /var/log/rchat-server.log