Service files

From XPUB & Lens-Based wiki
Revision as of 12:29, 27 May 2026 by SHRED (talk | contribs)

Making a systemd service file

When you deploy your application on a server, you need to make sure the application runs uninterrupted. If the application crashes, you'd want it to automatically restart, and if the server experiences a power outage, you'd want the application to start immediately once power is restored.

See: https://blog.miguelgrinberg.com/post/running-a-flask-application-as-a-service-with-systemd

Useful: https://containersolutions.github.io/runbooks/posts/linux/debug-systemd-service-units/

$ sudo nano /etc/systemd/system/myflaskapp.service
[Unit]
Description=<a description of your application>
After=network.target

[Service]
User=<username>
WorkingDirectory=<path to your app>
ExecStart=<app start command>
Restart=always

[Install]
WantedBy=multi-user.target

Here is an example:

[Unit]
Description=An example of a fieldwork-tool made in flask
After=network.target

[Service]
User=manetta
WorkingDirectory=/var/www/html/SI30/fieldwork-tools/example/
ExecStart=/var/www/html/SI30/fieldwork-tools/example/.venv/bin/flask --app observations run --port 5100
Restart=always

[Install]
WantedBy=multi-user.target

When the service file is new or changed, you need (one time) to:

$ sudo systemctl daemon-reload

Then you can:

$ sudo systemctl start myflaskapp
$ sudo systemctl status myflaskapp
$ sudo systemctl restart myflaskapp
$ sudo systemctl stop myflaskapp

Then finally when you see that start works (checking status, checking that it actually is running , etc)

$ sudo systemctl enable myflaskapp

Will make the "service" auto start when the pi restarts.

To view the log file (errors):

$ sudo journalctl -u myflaskapp -f

You can find documentation here:

https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html