Raspberry Pi is een krachtige SBC (single board computer) die je voor diverse toepassingen en projecten kunt gebruiken. De veelzijdigheid ervan ligt in de mogelijkheid om allerlei soorten programma's uit te voeren, inclusief aangepaste scripts, mede dankzij Raspberry Pi OS en andere op Linux gebaseerde besturingssystemen die worden uitgevoerd.

Het uitvoeren van een script of programma op de Raspberry Pi is net zo eenvoudig als het op het systeem zoeken en uitvoeren. Maar wat als u dit proces wilt automatiseren, misschien omdat uw project dit vereist of omdat u uw workflow wilt stroomlijnen?

Een antwoord hierop is het leren gebruiken van systemd.

Wat is Systemd?

systemd is een suite van systeemcomponenten voor serviceconfiguratie en gedrag op moderne Linux-systemen. Het wordt geïdentificeerd met een PID (proces-ID) van 1, aangezien dit het eerste proces is dat wordt opgestart bij het opstarten van het systeem. In het algemeen is het doel van systemd om u te helpen bij het beheren en uitvoeren van programma's bij het opstarten van het systeem. En dat is wat u zult gebruiken om uw programma te starten bij het opstarten op de Pi.

instagram viewer

Zoals aanvankelijk vermeld, zijn er verschillende methoden om programma's bij het opstarten op Linux-systemen uit te voeren, zoals rc.local, cron en autostart. Systemd gebeurt echter met een betere oplossing van de partij als u GUI-programma's (grafische gebruikersinterface) wilt starten, automatiseer toepassingen die moeten worden uitgevoerd nadat bepaalde systeemprocessen zijn begonnen, of voer programma's steeds opnieuw uit tot uw planning werken.

Verwant: Taken plannen in Linux met Cron en Crontab

Hoe systemd te gebruiken om programma's te starten bij het opstarten

systemd is een iets meer gecompliceerde methode om programma's te starten bij het opstarten op Linux-systemen. De planningsflexibiliteit die het biedt ten opzichte van andere methoden - degene die we hierboven hebben genoemd - weegt in elk aspect volledig op tegen de complexiteit ervan.

De systemd-methode maakt gebruik van unit-bestanden, die een beetje lijken op .ini-bestanden die coderingsinformatie bevatten over apparaten, services, sockets, opstartdoel en andere essentiële systeemcomponenten.

Eenheidsbestanden zijn van verschillende typen. Dus, op basis van wat voor soort bron u wilt declareren, moet u dienovereenkomstig een eenheidsbestandstype kiezen. Voor het doel van deze handleiding houden we het echter bij .service unit-bestanden, waarmee u het opstartgedrag van programma's en scripts op het systeem kunt beheren.

Hieronder vindt u een uitsplitsing van de stappen die nodig zijn om een ​​script / programma te starten bij het opstarten met systemd.

Een service maken

Om uw programma zo in te stellen dat het bij het opstarten wordt uitgevoerd, maakt u een service-unit-bestand dat systemd vertelt welk programma moet worden uitgevoerd en wanneer. Hier is hoe het te doen.

  1. Typ in het CLI-venster sudo nano /lib/systemd/system/display.service. U kunt elke naam voor uw service gebruiken, zolang deze maar eindigt op de extensie .service.
  2. Plak de volgende regels code in het servicebestand:
    [Eenheid]
    Beschrijving = PiCounter
    Na = netwerk.target
    [Onderhoud]
    ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
    Herstart = altijd
    Gebruiker = pi
    [Installeren]
    WantedBy = multi-user.target

Al uw gebruikelijke configuratie-opties vallen onder de Eenheid en Installeren secties, terwijl de servicespecifieke configuratie-opties onder de sectie Service vallen.

Enkele van de bovenstaande richtlijn-waardeparen die u mogelijk moet wijzigen, zijn onder meer:

ik. Na: Het bepaalt wanneer de service moet worden gestart. Instellen op network.target zorgt ervoor dat de vermelde waarde - in dit geval network.target - begint voordat de huidige eenheid wordt gestart. Het leidt echter niet tot een afhankelijkheidsrelatie voor de service om te activeren; dat wordt gedaan via andere richtlijnen zoals Wants, Requirements en WantedBy.

U kunt deze waarde natuurlijk aanpassen aan uw projectvereisten. Als u bijvoorbeeld wilt dat uw programma wordt uitgevoerd nadat uw Raspberry Pi verbinding heeft gemaakt met een netwerk, kunt u de network-online.target waarde. U kunt verwijzen naar Fedora's documentatie over systemd voor meer informatie over deze waarden.

ii. ExecStart: Het bevat het absolute pad en de programma- / scriptnaam die u bij het opstarten wilt uitvoeren. Dus afhankelijk van wat u wilt uitvoeren, moet u waarden voor beide richtlijnen toevoegen.

iii. Gebruiker: Het identificeert de naam van uw Raspberry Pi. Als u de naam van uw Pi heeft gewijzigd, moet u die waarde voor gebruiker invoeren.

iv. Gezocht door: Het is de meest gebruikelijke manier om de trigger voor een eenheid op te geven. Door het in te stellen op multi-user.target, kunt u een afhankelijkheidsrelatie tot stand brengen die het programma zal uitvoeren wanneer de systeembesturing wordt overgedragen aan de multi-user shell.

Bovendien draait dit uw programma ook voordat het X-Windows-systeem van Pi start, wat betekent dat uw programma wordt uitgevoerd voordat u zich op het systeem aanmeldt. Als u wilt dat een script wordt uitgevoerd voordat u zich aanmeldt op uw Raspberry Pi, kunt u dit doen.

De bovenstaande regels code werken voor niet-GUI-programma's. Als u echter een GUI-programma met systemd wilt uitvoeren, moet u de volgende code aan uw servicebestand toevoegen:

[Eenheid]
Beschrijving = PiCounter
Na = netwerk.target
[Onderhoud]
Omgeving = Weergave =: 0
Omgeving = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Herstart = altijd
[Installeren]
WantedBy = multi-user.target

In het bovenstaande richtlijn-waarde-paar hoeft u alleen de waarde voor de ExecStart richtlijn. Vervang degene in het codeblok door het programma dat u bij het opstarten wilt uitvoeren. Nadat u het servicebestand heeft ingevuld, drukt u op CTRL + O om het op te slaan.

Test de service

Terwijl de service gereed is, controleert u handmatig of deze werkt. Typ hiervoor de volgende opdracht in de terminal: sudo systemctl start display.service. De service zou uw instructies met succes moeten uitvoeren.

Zodra dit het geval is, beëindigt u het met sudo systemctl stop display.service.

Schakel de service in

Als het je is gelukt om je programma met succes uit te voeren met behulp van de service, is het tijd om het in te schakelen zodat het je programma automatisch uitvoert elke keer dat je je Raspberry Pi opstart.

Typ hiervoor sudo systemctl inschakelen display.service in het terminalvenster. En als dat eenmaal is gebeurd, ga je naar binnen sudo opnieuw opstarten om je Pi opnieuw te starten.

Zodra uw Raspberry Pi opstart, moet systemd uw programma uitvoeren volgens de door u verstrekte instructies.

Automatisering van programma-lancering bij opstarten op Raspberry Pi

Zoals de meeste Linux-systemen, laat Raspberry Pi OS je ook op verschillende manieren bewerkingen uitvoeren, en het blijft ook trouw aan het plannen van programma-lanceringen. Dus als u GUI-programma's / scripts bij het opstarten wilt starten en een betere controle over uw planning wilt, is systemd duidelijk een betere methode.

Als u echter een eenvoudigere oplossing wilt of als uw projectvereisten een specifieke planning vereisen, kunt u onze gids raadplegen voor Een Raspberry Pi-programma of -script uitvoeren bij het opstarten meer leren.

E-mail
De ultieme cheat sheet voor Raspberry Pi-opdrachten

Wilt u meer uit uw Raspberry Pi halen? Hier zijn heel veel handige opdrachten om door de Pi-terminal te navigeren en de GPIO-pinnen te programmeren.

Lees Volgende

Gerelateerde onderwerpen
  • DIY
  • Raspberry Pi
Over de auteur
Yash Wate (8 Artikelen gepubliceerd)

Yash is een stafschrijver bij MUO voor doe-het-zelf, Linux, programmeren en beveiliging. Voordat hij zijn passie in schrijven ontdekte, ontwikkelde hij zich voor het web en iOS. Je kunt zijn schrijven ook vinden op TechPP, waar hij andere branches behandelt. Behalve technologie praat hij graag over astronomie, Formule 1 en horloges.

Meer van Yash Wate

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Nog een stap…!

Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.

.