The easiest way to add systemctl is to use Matterbridge service cli for linux.
If your setup is too complex or you prefer to do it manually follow this method. You can still use mb-service to manage systemd after.
This will create the required directories if they don't exist
cd ~
mkdir -p ~/Matterbridge
mkdir -p ~/.matterbridge
mkdir -p ~/.mattercert
sudo chown -R $USER:$USER ~/Matterbridge ~/.matterbridge ~/.mattercert
Create a systemctl configuration file for Matterbridge
sudo nano /etc/systemd/system/matterbridge.service
Add the following to this file, replacing 3 times (!) USER with your user name (e.g. WorkingDirectory=/home/pi/Matterbridge, User=pi and Group=pi):
You may need to adapt the configuration to your setup:
[Unit]
Description=matterbridge
After=network-online.target
[Service]
Type=simple
ExecStart=matterbridge -service
WorkingDirectory=/home/<USER>/Matterbridge
StandardOutput=inherit
StandardError=inherit
Restart=always
User=<USER>
Group=<USER>
[Install]
WantedBy=multi-user.target
If you use the frontend with -ssl -frontend 443 and get an error message: "Port 443 requires elevated privileges", add this:
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
If you use the matterbridge-bthome plugin add this:
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_NET_ADMIN
If you modify matterbridge.service after, then run:
sudo systemctl daemon-reload
sudo systemctl restart matterbridge.service
sudo systemctl start matterbridge
sudo systemctl stop matterbridge
sudo systemctl status matterbridge.service
sudo systemctl enable matterbridge.service
sudo systemctl disable matterbridge.service
sudo journalctl -u matterbridge.service -n 1000 -f --output cat
Check the space used
sudo journalctl --disk-usage
remove all log older then 3 days
sudo journalctl --rotate
sudo journalctl --vacuum-time=3d
If you want to make the setting permanent to prevent the journal logs to grow too much, run
sudo nano /etc/systemd/journald.conf
add
Compress=yes # Compress logs
MaxRetentionSec=3days # Keep logs for a maximum of 3 days.
MaxFileSec=1day # Rotate logs daily within the 3-day retention period.
ForwardToSyslog=no # Disable forwarding to syslog to prevent duplicate logging.
SystemMaxUse=100M # Limit persistent logs in /var/log/journal to 100 MB.
RuntimeMaxUse=100M # Limit runtime logs in /run/log/journal to 100 MB.
save it and run
sudo systemctl restart systemd-journald
Run the following command to verify if you can install Matterbridge globally without being prompted for a password:
sudo npm install -g matterbridge --omit=dev
If you are not prompted for a password, no further action is required.
If that is not the case, open the sudoers file for editing using visudo
sudo visudo
verify the presence of of a line
@includedir /etc/sudoers.d
exit and create a configuration file for sudoers
sudo nano /etc/sudoers.d/matterbridge
add this line replacing USER with your user name (e.g. radxa ALL=(ALL) NOPASSWD: ALL)
<USER> ALL=(ALL) NOPASSWD: ALL
or if you prefers to only give access to npm without password try with (e.g. radxa ALL=(ALL) NOPASSWD: /usr/bin/npm)
<USER> ALL=(ALL) NOPASSWD: /usr/bin/npm
save the file and reload the settings with:
sudo chmod 0440 /etc/sudoers.d/matterbridge
sudo visudo -c
Verify if you can install Matterbridge globally without being prompted for a password:
sudo npm install -g matterbridge --omit=dev