In this tutorial you will learn to create services with systemd, so your scripts can be executed during system boot.

To do this, you need to create a <service-name>.service file in /etc/systemd/system/. This is a template of the file content:

[Unit]
Description=service description

[Service]
ExecStart=command

[Install]
WantedBy=multi-user.target

[Unit]

  • Description: A brief description of the service.
  • Wants: Declare “weak” dependencies requirement.
  • Requires: Declare “strong” dependencies requirement.
  • After: Declare that service can be started only when other service/unit finish its startup. For example, After: network.target means service will start after network is configured.
  • Before: the inverse of After.
  • OnFailure: A space-separated list of one or more units that are activated when this unit enters the “failed” state.
  • OnSuccess: A space-separated list of one or more units that are activated when this unit enters the “inactive” state.
  • StartLimitIntervalSec: seconds / StartLimitBurst: number: A service can’t be started more than “number” times in a “seconds” interval.

[Service]

  • Type: start-up type. Default option is simple, more info about this in this link.
  • ExecStart: Command that is executed when this service is started.
  • Restart: indicates if service should be restarted when process exits cleanly (on-success), when process exits with a non-zero exit code (on-failure), should be restarted always (always) or never (no). Other values are on-abnormal, on-abort and on-watchdog.
  • RestartSec: Configures the time to sleep (in seconds) before restarting a service .
  • User: set the user that processes are executed as. Default is root.

[Install]

  • This section is needed when you want to install your unit/service (systemctl enable).
  • WantedBy: is similar to After but is interpreted only during installation of the unit. Most used option is multi-user.target.

Start / Enable the service

  • Once you’ve saved the file in /etc/systemd/system/, you need to reload systemd with sudo systemctl daemon-reload (you don’t need “sudo” if you are a “root” user).
  • Then, you can start your service with sudo systemctl start myserice.service, replacing myservice with your service filename.
  • If you want to install your service (service will start when computer boots up), type sudo systemctl enable myservice.service.
  • You can start and enable a service with one command: sudo systemctl enable --now myservice.service.

Stop / Disable the service

  • You can stop a service with sudo systemctl stop myservice.service.
  • To disable a service, so can’t be started when computer boots up, type sudo systemctl disable myservice.service.
  • When you uninstall some program, ensure that there are no orphaned units, and disable them if there are.

User services

  • You can create services for specific users. Service files can be inside /etc/systemd/user/ (with root permissions) or ~/.config/systemd/user/.
  • Use WantedBy=default.target in the [Install] section.
  • When you manage these services, add --user to the systemctl commands.

More commands

  • Restart a service with sudo systemctl restart myservice.service.
  • Check service status with sudo systemctl status myservice.service.
  • Some services allow to reload its configuration without needing a restart (like httpd). In those cases, you can type sudo systemctl reload myservice.service.

Timers

If you have any suggestion, feel free to contact me via social media or email.