Service files: Difference between revisions
No edit summary |
|||
| Line 7: | Line 7: | ||
Useful: https://containersolutions.github.io/runbooks/posts/linux/debug-systemd-service-units/ | Useful: https://containersolutions.github.io/runbooks/posts/linux/debug-systemd-service-units/ | ||
$ sudo nano /etc/systemd/system/ | $ sudo nano /etc/systemd/system/YOUR_NAME_OF_THE_APP.service | ||
<pre> | <pre> | ||
| Line 47: | Line 47: | ||
Then you can: | Then you can: | ||
$ sudo systemctl start | $ sudo systemctl start YOUR_NAME_OF_THE_APP | ||
$ sudo systemctl status | $ sudo systemctl status YOUR_NAME_OF_THE_APP | ||
$ sudo systemctl restart | $ sudo systemctl restart YOUR_NAME_OF_THE_APP | ||
$ sudo systemctl stop | $ sudo systemctl stop YOUR_NAME_OF_THE_APP | ||
'''Then finally''' when you see that start works (checking status, checking that it actually is running , etc) | '''Then finally''' when you see that start works (checking status, checking that it actually is running , etc) | ||
$ sudo systemctl enable | $ sudo systemctl enable YOUR_NAME_OF_THE_APP | ||
Will make the "service" auto start when the pi restarts. | Will make the "service" auto start when the pi restarts. | ||
| Line 60: | Line 60: | ||
To view the log file (errors): | To view the log file (errors): | ||
$ sudo journalctl -u | $ sudo journalctl -u YOUR_NAME_OF_THE_APP -f | ||
You can find documentation here: | You can find documentation here: | ||
Revision as of 12:42, 27 May 2026
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/YOUR_NAME_OF_THE_APP.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=/YOUR/PATH/ ExecStart=/YOUR/PATH/.venv/bin/flask --app observations run --port 51?? #YOUR_PORT 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 YOUR_NAME_OF_THE_APP $ sudo systemctl status YOUR_NAME_OF_THE_APP $ sudo systemctl restart YOUR_NAME_OF_THE_APP $ sudo systemctl stop YOUR_NAME_OF_THE_APP
Then finally when you see that start works (checking status, checking that it actually is running , etc)
$ sudo systemctl enable YOUR_NAME_OF_THE_APP
Will make the "service" auto start when the pi restarts.
To view the log file (errors):
$ sudo journalctl -u YOUR_NAME_OF_THE_APP -f
You can find documentation here:
https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html