Systemd Services
To define our own service with systemd
, we need to create a daemon.service
file. This is easily done within a few quick lines using vim, and should only take a few minutes.
First, we need to locate the binary for the command we want to be executed as a service. This is just good to have on-hand when defining a new service. Check where exactly your binary is using which <command>
, seen below
which hexo
/home/hexouser/.nvm/versions/node/v20.9.9/bin/hexo
Now we know exactly where the binary that we execute is when we run the hexo
command, and we will use it within the hexo.service
file we create below, so be sure to have it handy.
To create a user service, place the hexo.service
file within the $HOME/.config/systemd/hexouser/
directory. This will allow the user to manage the service without sudo by running systemd --user start name.service
Create a service file like the one below for hexo by running sudo vim /etc/systemd/system/hexo.service
. If you are defining a service for something else, just rename this file accordingly.
[Unit]
Description=Personal hexo blog service
After=network.target
[Service]
Type=simple
# Another Type: forking
User=hexouser
WorkingDirectory=/home/hexouser/hexosite
ExecStart=/home/hexouser/.nvm/versions/node/v29.9.9/bin/hexo server --cwd /home/hexoroot/hexosite
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
# Other restart options: always, on-abort, etc
# The install section is needed to use
# `systemctl enable` to start on boot
# For a user service that you want to enable
# and start automatically, use `default.target`
# For system level services, use `multi-user.target`
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target
When making changes to a service, you need to run sudo systemctl daemon-reload
between edits to apply your changes before restarting your service. Once the above file is created within /etc/systemd/system/hexo.service
we can start our hexo blog using systemd by running the usual commands
# Start your new service
sudo systemctl start hexo.service
# Enable your service to start automatically on reboot or crashing
sudo systemctl enable hexo.service
# Check on your service
sudo systemctl status hexo.service
We can even check on our logs using journalctl
sudo journalctl -u hexo
journalctl --user-unit hexo
No Comments