I have a number of bottle.py web services that I run on my servers. For the last few years, I’ve been using tmux to launch these services and then detaching them so they continue running after I logout of the SSH session. Recently, one of those servers had an issue causing the provider to require moving my VPS to another machine. So, when I went to use it, I got the
503 Service Unavailable message (that no one likes to see)!
Today, I finally got around to setting up systemd service files for these services. It only took about an hour (including troubleshooting things not working). Below is the
shopping.service file (for a web based shopping list I wrote):
# Save this file in ~/.config/systemd/user/shopping.service # then run: # $ systemctl --user daemon-reload # $ systemctl --user enable shopping.service # Below will prevent the service stopping when we terminate the SSH session # $ sudo loginctl enable-linger username [Unit] Description=Shopping List (bottle.py) After=network.target [Service] Type=simple WorkingDirectory=/home/simon/web/shopping ExecStart=/usr/bin/python3 /home/simon/web/shopping/shopping.py Restart=always [Install] WantedBy=default.target
Note: make sure to follow the comments. Otherwise, you’ll also have problems.
Once you’ve created and symlinked the file to
~/.config/systemd/user, you’ll be able to check all is good as you can for any system process.
simon@server:~/web/shopping [ssh] $ systemctl --user status shopping_list.service ● shopping_list.service - Shopping List (bottle.py) Loaded: loaded (/home/simon/.config/systemd/user/shopping_list.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2023-03-25 20:26:29 GMT; 9min ago Main PID: 32632 (python3) Tasks: 11 (limit: 1129) Memory: 100.3M CPU: 7.471s CGroup: /firstname.lastname@example.org/app.slice/shopping_list.service └─32632 /usr/bin/python3 /home/simon/web/shopping/run_sl2.py
I’ll monitor this one service for a while, then I plan to use systemd service files for all my web services.