How to Create a new service with systemd

This tutorial (create a new service with systemd) describes the steps to follow to turn a program into a systemd service that can be started automatically during system startup. For our example, we will create a service to start the daemon Deluge start ( deluged ), but it can be applied to any program.

Prerequisites

  • Have the administrative rights
  • Knowing how to use the terminal

How to create a new service with systemd

Creating a program encapsulating script

Deluged does not support stopping or stimulus parameters, we need to create a script that will do that. We can store the script in / usr / local / bin

sudo cat> /usr/local/bin/deluge.sh

Then paste the following code:

#! / bin / bash 
# /usr/local/bin/deluge.sh 
#
 
function d_start ( ) 
{ 
	echo  "Deluge: starting service" 
	deluged --pidfile = / tmp / deluge.pid
	 sleep  5 
	echo  "PID is $ (cat /tmp/deluge.pid) " 
}
 
function d_stop ( ) 
{ 
	echo  "Deluge: stopping Service (PID = $ (cat /tmp/deluge.pid) )" 
	kill $ ( cat  / tmp / deluge.pid ) 
	rm  / tmp / deluge.pid
 }
 
function d_status ( ) 
{ 
	ps  -ef  |  grep deluged |  grep  -v  grep 
	echo  "PID indicate indication file $ (cat /tmp/deluge.pid 2> / dev / null) " 
}
 
# Some Things That run always 
touch  / var / lock / deluge
 
# Management instructions of the service 
box  "$ 1"  in 
	start )
		d_start
		;; 
	Stop )
		d_stop
		;; 
	Reload )
		d_stop
		sleep  1
		d_start
		;; 
	Status )
		d_status
		;; 
	* ) 
	Echo  "Usage: $ 0 {start | stop | reload | status}" 
	exit  1 
	;; 
esac
 
exit  0

Create the service file

In Systemd, services are defined in files tickets · located in / etc / systemd / system / .

Create a service package for our program:

sudo cat> /etc/systemd/system/deluge.service

Then paste the following code:

[Unit]
Description = Deluge daemon
After network.target = auditd.service

[Service]
Type = forking
ExecStart = / usr / local / bin / start deluge.sh
ExecStop = / usr / local / bin / stop deluge.sh
ExecReload = / usr / local / bin / reload deluge.sh

[Install]
WantedBy = multi-user.target

Service Installation

We must now reload the list of services:

sudo systemctl daemon reload

Then activate the launch of the service at boot:

sudo systemctl enable deluge

Key services management commands

For reference, the following commands to manage the service:

In our example, <service> == deluge

systemctl sudo <command></command>
orderDescription
startStart Service
stopStop Service
statusService Status
is-enabledWhether the service is activated at boot
enableActive start the service
disableDisables the startup service

Conclusion

Please note, services are launched by root , so if you have already configured the program with another user, it will:

  • either copy the configuration to root ,
  • or point the service to the proper configuration (for deluged there is an option -config )

So, it remains only to test that everything is working by running the service:

sudo systemctl start deluge

If everything can restart the machine to check that the service starts automatically:

sudo reboot

Leave a comment

Your email address will not be published. Required fields are marked *