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].
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
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