Creating systemd Service Files

A Demo systemd Service

The service program.

$ cat /data/abc/pointless.sh
#!/bin/bash

while true
do
    echo The current time is $(date)
    sleep 1
done

The .service file pointless.service

$ sudo vim /etc/systemd/system/pointless.service
[Service]
ExecStart=/data/abc/pointless.sh

Start and control the service

$  sudo systemctl start pointless.service
$  sudo systemctl status pointless.service

$ sudo journalctl -u pointless
Mar 06 21:45:24 pointless.sh[1090034]: The current time is Sun 06 Mar 2022 09:45:24 PM CST
Mar 06 21:45:25 pointless.sh[1090034]: The current time is Sun 06 Mar 2022 09:45:25 PM CST
Mar 06 21:45:26 pointless.sh[1090034]: The current time is Sun 06 Mar 2022 09:45:26 PM CST
Mar 06 21:45:27 pointless.sh[1090034]: The current time is Sun 06 Mar 2022 09:45:27 PM CST

$  sudo journalctl -u pointless -f

$ sudo systemctl stop pointless


$ man systemd.service

$ sudo systemctl enable pointless
Created symlink /etc/systemd/system/multi-user.target.wants/pointless.service → /etc/systemd/system/pointless.service.

$ sudo systemctl disable pointless

View Status/Logs

# See if running, uptime, view latest logs
sudo systemctl status
sudo systemctl status my_service
# Or for a user service
systemctl --user status my_service

# See all systemd logs
sudo journalctl

# Tail logs
sudo journalctl -f

# Show logs for specific service
sudo journalctl -u my_daemon
# For user service
journalctl --user-unit my_user_daemon

A full version of .service file

sudo vim pointless.service

[Unit]
Description=My pointless service
After=network.target

[Service]
ExecStart=/data/abc/pointless.sh
Restart=always
WorkingDirectory=/data/abc
User=ubuntu
User=ubuntu
Environment=GOPATH=/home/ubuntu/go

# auto start with system
[Install]
WantedBy=multi-user.target

Problem: Can not Get Env Variables

The environment variables can not be get in .service file, they must be specified the the .service file, like this

[Unit]
Description=abc serivce
After=network.target

[Service]
User=ubuntu
Group=ubuntu
Type=simple
Restart=always
RestartSec=5s
WorkingDirectory=/data/abc
ExecStart=/data/abc/demo
Environment=MONGODB_URL='mongodb://localhost:27017'

[Install]
WantedBy=multi-user.target

References