Below is a super simple guide to creating a systemd service on linux. Systemd is not yet supported on all the linux systems, but it's popular and easy to use.
What is systemd?
systemd is a Linux initialization system and service manager that includes features like on-demand starting of daemons, mount and automount point maintenance, snapshot support, and processes tracking using Linux control groups.
In simple terms, it helps us manage the lifecycle of services. You can add services to startup jobs, if your services die, it can auto restart and much more.
Making a simple flask application (our service)
- python3 installed
- pip3 installed
Install flask using pip3
sudo pip3 install flask
Make a basic flask application
Make a file
main.py, place it in any folder ex -
/home/mridul/main.py and add the following contents in it.
from flask import Flask app = Flask(__name__) def hello_world(): return 'Hello World!' app.run(port=8000)
Run and test the flask app
To run out flask server -
To test if our application is running -
You should be able to see Hello World! in the curl output.
Making a systemd entry
To begin with the systemd service entry will be stored in
So, create a new file
[Unit] Description=Simple flask app service After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=mridul ExecStart=/usr/bin/python3 /home/mridul/main.py [Install] WantedBy=multi-user.target
Most of the above fields are easy to understand. The
After field is used to start our service only after the network service runs. We can also put something else like
mysql.target to run it after mysql service runs.
User field, we need to provice which user should the service be run from, for our example we can run it from my user i.e.
ExecStart is where we give the command to run our service.
Restart is used to specify the behavior when our service dies due to some reason. setting it to
always will restart our service everytime it dies, even if it exited with status code
0. To restart only in case of failure we can set it to
Basic systemd commands
To start our service
sudo systemctl start flaskapp
To stop our service
sudo systemctl stop flaskapp
To restart our service
sudo systemctl restart flaskapp
To check status of our service
sudo systemctl status flaskapp
To start our service during system startup
sudo systemctl enable flaskapp