Wanneer je een Python script gebruikt om bijvoorbeeld de temperatuur te meten of een display aan te sturen, dan start je dit script handmatig vanaf de bash prompt. Het is ook mogelijk om tijdens het opstarten van de Raspberry Pi automatisch een Python script te starten.
Om het Python script automatisch te laten starten kun je handig gebruik maken van het standaard aanwezige crontab commando. Met behulp van cron kun een taak inplannen op een bepaald tijdstip. Je kunt in cron ook aangeven dat tijdens het opstarten een taak moet worden uitgevoerd.
Voorbeeld: Je hebt een script gemaakt dat de temperatuur van een DHT22 sensor uitleest en deze wegschrijft in een database. Het script heeft de naam temperatuur.py
en bevind zich in de thuismap van de pi-gebruiker. Het volledige pad naar het bestand is dan:
/home/pi/temperatuur.py
pwd
het volledige pad naar de map bekijken. Ga naar de betreffende map en voer het pwd
commando uit.Hoewel het in de meeste situaties niet nodig zal zijn is het toch verstandig om het Python script execute rechten te geven. Dit doe je met behulp van het chmod
command en de +x
optie.
chmod +x /home/pi/temperatuur.py
Voorbeeld Python script automatisch starten
Om temperatuur.py
in de map /home/pi/
op te starten tijdens een herstart van de Raspberry Pi gaan we deze toevoegen aan de cron-taken. Gebruik het volgende commando om de cron-editor te openen:
sudo crontab -e
De eerste keer dat je de cron taken wil gaan bewerken wordt er gevraagd welke editor je hiervoor wilt gaan gebruiken. Je kunt dan het beste kiezen voor optie 2 de nano-editor.
Scroll naar de laatste lege regel, we gaan nu een extra regel toevoegen met de onderstaande opmaak:
@reboot python /pad/naar/pythonscript.py &
In het geval van het temperatuur script uit het voorbeeld voegen we de onderstaande regel toe:
@reboot python /home/pi/temperatuur.py &
Dit commando zorgt dat tijdens een reboot, Python het script temperatuur.py
in de map /home/pi/
gaat uitvoeren op de achtergrond, dit laatste geven we aan met behulp van het &
teken.
Sluit de cron-editor af met: control-X (afsluiten), gevolgd ‘Y’ (wijzigingen opslaan) en de enter-toets (bevestigen).
Herstart hierna je Raspberry Pi en controleer of het script automatisch is gestart.
Wil je controleren welke cron taken zijn ingepland dan kun je dit doen met behulp van het commando:
sudo crontab -l
Python scripts die gebruik maken van het netwerk
Wanneer je een Python script uitvoert die gebruik maakt van een netwerkverbinding dan is het verstandig om een vertraging toe te voegen. Het kan namelijk voorkomen dat het Python script wordt gestart voordat de netwerkverbindingen zijn geactiveerd, wat als resultaat kan hebben dat het Python script wordt afgebroken vanwege een error.
Plaats voor het commando sleep XX &&
toe, waarbij je XX
vervangt door het aantal seconden dat moet worden gewacht. In de meeste gevallen is 10 seconden genoeg. Het commando voor het temperatuur.py voorbeeldscript wordt in dit geval:
@reboot sleep 10 && python /home/pi/temperatuur.py &
LS,
Hoi ik heb je aanwijzingen gevolgd om mijn raspberry Pi aan het werkt te krijgen. Ik creëer een Cron file, welke terug te lezen is met sudo crontab -l. Ik krijg het script te zien, maar bij rebooten van de Raspberry gebeurd er niks en is de Cron niet uitgevoerd. Wat gaat er niet goed?? Het lijkt wel of de Cron script niet wordt ingelezen. Heb je enig idee??
Bij voorbaat dank,
Jos Snijders
Kun je de inhoud van de cron posten?
Hoi Richard,
@reboot python /home/pi/programma14.py &
dit staat onderaan in de cron file. Heb ook de rechten vooraf gegeven met;
chmod +x /home/pi/programma14.py
Het lijkt wel of de Raspberry het cron script niet vindt ..
Hartelijk dank wederom voor het meedenken.
Jos Snijders
Krijg je het script te zien als dit uitvoert?
cat /home/pi/programma14.py
Zo ja, dan denk ik dat het path naar python niet gevonden kan worden, probeer eens:
@reboot /usr/bin/python /home/pi/programma14.py &
Hoi Richard,
Ik krijg het python script te zien bij cat /home/pi/programma14.py …
Heb de cron file aangepast op de wijze zoals je aangeeft … maar het verdomde ding wil niet opstarten. Het is een logische gedachte gang om ook de padnaam naar Python aan te geven. Maar helaas …
Ben blij dat met me meedenkt en met mogelijke oplossingen komt…
wat kan ik nog meer doen?
Groetjes Jos Snijders
Hoi Richard,
Python script automatisch starten tijdens reboot.
Heeft u ook een script voorbeeld voor de Radio op te starten zodra ik hem aanzet.
Krijg hem alleen aan in de terminal
sudo python3 radio.py
Groet Peter
Hoi Richard,
Zo kan het ook.
sudo crontab -e
@reboot python3 /home/pi/radio.py &
Maar is dit de goede oplossing…?
Groet Peter
@Peter: Dat is een prima oplossing 🙂