Daemons, Creating System Services (using systemd)

Daemons, Creating System Services (using systemd)

Want to run your programs as “background services” that automatically start on boot? You’ve come to the right place.

Auto-Starting Services on Boot

Newer Linux distributions are trending towards using systemd for managing daemons. Typically, systems based on Fedora, ArchLinux, or Debian (8 or later) use systemd. This includes Ubuntu releases including and after 15.04, CentOS, and Red Hat. If you are unsure if your system is using systemd, you may check with the following command:

$ ps -p 1 -o comm=

If the preceding command returns the string systemd, continue with the instructions below.

Running Mosquitto as Service

Creaate a file with the name mosquitto.service in either/etc/systemd/system or /lib/systemd/system folder. You might need sudo access to be able to create the file. After creating the file, add te following content in there.

[Unit]

Description=Mosquitto MQTT Broker daemon
ConditionPathExists=/etc/mosquitto/mosquitto.conf
After=network.target
Requires=network.target

[Service]
Type=forking
RemainAfterExit=no
StartLimitInterval=0
PIDFile=/run/mosquitto.pid
ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf -d
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=2

[Install]
WantedBy=multi-user.target

The HomeBridge Service

The homebridge.service is in /etc/systemd/system/ folder, and the contents are:

[Unit]
Description=Homebridge
BindsTo=home-assistant.service
After=home-assistant.service

[Service]
Type=simple
User=homeassistant
ExecStartPre=/bin/sleep 60
ExecStart=/usr/bin/homebridge -U /home/mahasri/.homebridge/
RestartSec=10
Restart=on-failure

The home-assistant Service

The file is in /etc/systemd/system/ folder, and the contents are:

[Unit]
Description=Home Assistant
Wants=mosquitto.service homebridge.service
Before=homebridge.service
After=network.target mosquitto.service

[Service]
Type=simple
User=%i
ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant"

[Install]
WantedBy=multi-user.target

AppDaemon Service

For the App Daemon Service to work, please make sure the following are correct:

  • User - Double check the user name - some systems it will be hass, some systems it will be homeassistant…etc
  • Exec Start - > check the path, and run the command! It should work outside first before it runs as a service
  • After - > make sure the name matches exactly…. do a ls -al /etc/systemd/system/home*.* to get the actual file name
[Unit]
Description=AppDaemon
After=home-assistant.service
[Service]
Type=simple
User=homeassistant
ExecStart=/usr/local/bin/appdaemon -c /home/homeassistant/conf
[Install]
WantedBy=multi-user.target

Glances Service

To get stats about your machine, install glances on your linux machine, and run it as a service, so that you can query stats using web URL.

To see the available commands via api, go to http://192.168.x.xxx:61208/api/2/pluginslist. That should give you a JSON with a bunch of commands available for you to query using web URL… You can then make a query using the url http://192.168.x.xxx:61208/api/2/COMMAND_HERE

for ex: To get memory, go to the URL http://192.168.x.xxx:61208/api/2/mem. If you just want to get available memory without having to parse JSON, you can call http://192.168.x.xxx:61208/api/2/mem/available

Once you have the API, you can call it from Home Assistant using a curl command inside a commandline sensor.

To run the Glances as a systemd service, create a file with a name glances.service in /etc/systemd/system folder with the following contents

[Unit]
Description=Glances
After=network.target

[Service]
ExecStart=/usr/bin/glances -w
Restart=on-abort

[Install]
WantedBy=multi-user.target

Additional commands for you to consider:

After making changes to the service, always run the command to reload the new services

$ sudo systemctl --system daemon-reload

To enable service

$ sudo systemctl enable glances.service

To start Glances service automatically

$ sudo systemctl start glances.service

To restart Glances service

$ sudo systemctl restart glances.service

To Check the status

$ sudo systemctl status glances.service

comments powered by Disqus