Raspbian: Python script als een service starten

Wanneer je gebruik maakt van Python om bijvoorbeeld een sensor uit te lezen, dan is het natuurlijk handig dat het script in de achtergrond op je Raspberry Pi actief is. De beste manier om dit voor elkaar te krijgen is door het script als een systeem service te definiëren.

Door er een service van te maken wordt het script automatisch gestart bij een herstart en kun je het script stoppen en starten door middel van het systemctl commando. Daarnaast is het ook mogelijk om eventuele logging te bekijken met behulp van journalctl.

Het script

In de onderstaande voorbeelden gaan we er vanuit dat je een Python script heb gemaakt met de naam mijnscript.py in de de thuismap van de standaardgebruiker pi /home/pi/. Van dit Python script gaan we een service maken op je Raspberry Pi.

Systeem service aanmaken

Als eerste stap gaan we een nieuwe service definiëren, hierbij kun je iedere gewenste naam gebruiken gevolgd door .service. In dit voorbeeld gebruiken we de naam mijnscript.service en maken een configuratie bestand aan met de nano editor. Dit doen we in de systeemmap waarin alle services zich bevinden /lib/systemd/system.

cd /lib/systemd/system/
sudo nano mijnscript.service

In het lege mijnscript.service bestand voegen we de onderstaande code toe:

[Unit]
Description=Mijn Python Script
After=multi-user.target
 
[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/mijnscript.py
Restart=on-abort
 
[Install]
WantedBy=multi-user.target

In de bovenstaande code kun je eventueel de Description aanpassen. Wanneer je een andere naam dan mijnscript.py wil gebruiken is dat natuurlijk mogelijk. Zorg in dat geval wel dat het volledig path naar het script klopt bij ExecStart onder [Service].

service raspbian

Door gebruik te maken van Restart=on-abort wordt het script automatisch herstart op het moment dat het wordt afgebroken door een foutmelding. Een volledig overzicht van alle configuratie mogelijkheden kun je terugvinden in deze linux wiki.

Bewaar de wijzigingen in de nano editor met control + X, Y, Enter.

Script activeren

Nadat de service is gedefinieerd kunnen we deze gaan activeren.

Als eerst stap moeten de juiste rechten worden toegekend aan het .service bestand:

sudo chmod 644 /lib/systemd/system/mijnscript.service

Het Python script mijnscript.py moet worden voorzien van execute rechten:

chmod +x /home/pi/mijnscript.py

Na iedere wijziging in de service map moeten de services opnieuw worden ingeladen, dit doe je met het commando:

sudo systemctl daemon-reload

Hierna activeren we onze nieuwe service:

sudo systemctl enable mijnscript.service

En als laatste stap kunnen we dan eindelijk onze service starten:

sudo systemctl start mijnscript.service

Service stoppen, starten etc..

Nadat we de service hebben gestart kunnen we de status opvragen van de service, dit doe je met:

sudo systemctl status mijnscript.service

Raspbian Python script als Service

Natuurlijk kun het ook voorkomen dat je de service wilt starten of stoppen. Als je bijvoorbeeld het Python script gaat aanpassen dan moet je de service stoppen en na het bewerken weer opnieuw starten.

Daarnaast is het mogelijk om de log van de service te bekijken, dit kan heel handig zijn als er zich problemen voordoen met het Python script.

Service starten

sudo systemctl start mijnscript.service

Service stoppen

sudo systemctl stop mijnscript.service

Log van de Service bekijken

sudo journalctl -f -u mijnscript.service

Plaats een reactie