Vier gangbare manieren om een programma te starten als de Pi boot
De vier manieren zijn:
crontab, rc.local, autostart, systemd
crontab
Maak een job aan in crontab die begint met @reboot. Bijvoorbeeld:
@reboot python3 /home/pi/stopknop.py &
Let op, er zijn meerdere crontabs: gebruik sudo crontab -e om een job aan te maken in de crontab van root; en crontab -e om een job aan te maken voor de standaard user pi. Dit is vooral handig als je de Pi start in de CLI-modus; grafische programma’s kun je zo niet opstarten.
Meer voorbeelden van crontab vind je hier .
rc.local
Het nadeel is dat taken die je start via rc.local uitgevoerd worden voordat het windowsysteem opstart. Dat betekent, dat je geen toegang hebt tot onderdelen van de GUI.
autostart
Hiermee kun je een grafisch (of console-)programma automatisch starten nadat de desktop is opgestart.
Voorheen onder Bullseye gebruikte Pi OS LXDE als desktopomgeving en kon je het bestand /etc/xdg/lxsession/LXDE-pi/autostart gebruiken.
Maar sinds Bookworm gebruikt Pi OS Wayland als display-server.
Daarom:
open het bestand ~/.config/wayfire.ini
Voeg onderaan de sectie [autostart] toe
Geef een willekeurige naam op met daarachter = en het commando dat je wilt uitvoeren.
Bijvoorbeeld:
[autostart] voorbeeld = touch $HOME/Desktop/test
systemd
systemd is bij veel Linux-distro’s het standaard init system. Het is ook de meest gecompliceerde manier voor het automatisch starten van programma’s, maar je kunt er programma’s mee starten voordat LXDE start, het kan wachten totdat bepaalde andere processen (bv netwerk, graphical desktop) zijn opgestart, en het kan je programma gewoon steeds blijven starten totdat het werkt. In dat opzicht is het een betrouwbare manier om services te maken en te beheren die op de achtergrond draaien.
Het systemctl-commando is een managementtool voor het systemd init system.
Je kunt er bijvoorbeeld services mee starten, stoppen of de status ervan opvragen.
Het opzetten van een service in systemd:
1. Maak het service-unit bestand aan:
Open een terminal en maak een nieuw bestand aan in /etc/systemd/system/. Bijvoorbeeld: sudo nano /etc/systemd/system/mijn-service.service.
Voeg de volgende configuratie toe aan het bestand, waarbij je [Unit], [Service], en [Install] secties invult. Een voorbeeld:
[Unit]Description=Mijn applicatie service After=network.target [Service] Type=simple User=mijngebruiker WorkingDirectory=/pad/naar/je/applicatie ExecStart=/pad/naar/je/applicatie/start.sh Restart=on-failure [Install] WantedBy=multi-user.target
- [Unit]: Beschrijft de service en vereisten.
- [Service]: Definieert hoe de service wordt uitgevoerd.
- [Install]: Specificeert wanneer de service moet worden gestart.
- Laad de service opnieuw en activeer de service:
- Voer het volgende commando uit om systemd te laten weten dat er een nieuwe service is:
sudo systemctl daemon-reload
. - Activeer de service zodat deze bij het opstarten wordt gestart:
sudo systemctl enable mijn-service.service
.
- Voer het volgende commando uit om systemd te laten weten dat er een nieuwe service is:
- Start de service:
- Start de service met:
sudo systemctl start mijn-service.service
.
- Start de service met:
- Controleer de status van de service:
- Gebruik
sudo systemctl status mijn-service.service
om te controleren of de service correct werkt.
- Gebruik
- Vervang
mijn-service.service
met een naam die past bij jouw service. - Pas de configuratie in het bestand aan aan de specifieke behoeften van je service, zoals het pad naar je script, gebruikersnaam, etc.
- Zorg ervoor dat de bestandsrechten correct zijn ingesteld (bijvoorbeeld: 644 voor het
.service
bestand). - Je kunt de logboeken van de service controleren met
journalctl -u mijn-service.service
. - Gebruik
sudo systemctl stop mijn-service.service
om de service te stoppen. - Gebruik
sudo systemctl restart mijn-service.service
om de service opnieuw te starten. - Gebruik
sudo systemctl disable mijn-service.service
om de service niet bij het opstarten te starten.
Mocht geen van bovengenoemde opties werken, en het systeem boot standaard in de cli, dan rest nog de mogelijkheid om het opstartcommando in de .bashrc te zetten van de betreffende user.
Dit is eigenlijk een ‘hack’, omdat .bashrc bedoeld is om de bash van de betreffende user persoonlijk in te richten. Want in elke console/terminal die je voor deze user vervolgens opent wordt een instantie van hetzelfde programma opnieuw gestart…