Raspberry Pi är en kraftfull SBC (enkel kortdator) som du kan använda för olika applikationer och projekt. Dess mångsidighet ligger i dess förmåga att köra alla typer av program, inklusive anpassade skript, delvis tack vare Raspberry Pi OS och andra Linux-baserade operativsystem som det kör.
Att köra ett skript eller program på Raspberry Pi är lika enkelt som att hitta det på systemet och köra det. Men tänk om du vill automatisera denna process, kanske för att ditt projekt kräver det eller för att du vill effektivisera ditt arbetsflöde?
Ett svar på detta är att lära sig att använda systemd.
Vad är Systemd?
systemd är en serie systemkomponenter för servicekonfiguration och beteende på moderna Linux-system. Det identifieras med en PID (processidentifierare) av 1 eftersom det är den första processen att starta upp vid systemstart. Syftet med systemd är i stort sett att hjälpa dig med att hantera och köra program vid systemstart. Och det är vad du kommer att använda för att starta ditt program vid start på Pi.
Som nämnts initialt finns det flera metoder för att köra program vid start på Linux-system, till exempel rc.local, cron och autostart. Systemd händer dock med en bättre lösning på partiet om du vill starta GUI-program (grafiskt användargränssnitt), automatisera att program körs efter att vissa systemprocesser har börjat, eller kör program om och om igen tills din schemaläggning Arbetar.
Relaterad: Hur man schemalägger uppgifter i Linux med Cron och Crontab
Hur man använder systemd för att starta program vid start
systemd är en lite mer komplicerad metod för att starta program vid start på Linux-system. Schemaläggningsflexibiliteten som den erbjuder jämfört med andra metoder - de vi har nämnt ovan - uppväger dock helt dess komplexitet i alla aspekter.
Systemd-metoden använder enhetsfiler, som är ungefär som .ini-filer som innehåller kodningsinformation om enheter, tjänster, uttag, startmål och andra viktiga systemkomponenter.
Enhetsfiler är av olika slag. Så, baserat på vilken typ av resurs du vill deklarera, måste du välja en enhetstyp i enlighet med detta. För syftet med den här guiden kommer vi dock att hålla oss till .serviceenhetsfiler, som låter dig hantera startbeteendet för program och skript på systemet.
Nedan följer en sammanfattning av stegen som är inblandade i att starta ett skript / program vid start med systemd.
Skapa en tjänst
För att ställa in att programmet ska köras vid start skapar du en serviceenhetsfil som berättar för systemet vilket program du ska köra och när. Så här gör du.
- I CLI-fönstret skriver du sudo nano /lib/systemd/system/display.service. Du kan använda vilket namn som helst för din tjänst så länge det slutar med .service-tillägget.
- Klistra in följande kodrader i servicefilen:
[Enhet]
Beskrivning = PiCounter
After = network.target
[Service]
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Starta om = alltid
Användare = pi
[Installera]
WantedBy = multi-user.target
Alla dina vanliga konfigurationsalternativ faller under Enhet och Installera avsnitt, medan de tjänstespecifika konfigurationsalternativen går under avsnittet Service.
Några av ovanstående direktivvärde-par som du kan behöva ändra inkluderar:
i. Efter: Den avgör när tjänsten ska startas. Ställer in den till network.target säkerställer att det angivna värdet - network.target i detta fall - startar innan du börjar den aktuella enheten. Det riktar dock inte ett beroendeförhållande för att tjänsten ska utlösas; det görs genom andra direktiv som vill, kräver och WantedBy.
Naturligtvis kan du ändra detta värde så att det passar dina projektkrav. Om du till exempel vill att ditt program ska köras efter att din Raspberry Pi ansluts till ett nätverk kan du använda network-online.target värde. Du kan hänvisa till Fedoras dokumentation om systemd för att lära dig mer om dessa värden.
ii. ExecStart: Den innehåller den absoluta sökvägen och det program / skriptnamn som du vill köra vid start. Så beroende på vad du vill utföra måste du lägga till värden för båda dessa direktiv.
iii. Användare: Det identifierar namnet på din Raspberry Pi. Om du har ändrat ditt Pi-namn måste du ange det värdet för användaren.
iv. WantedBy: Det är det vanligaste sättet att specificera utlösaren för en enhet. Genom att ställa in den till multi-user.target, kan du upprätta en beroendeförhållande som kör programmet när systemkontrollen överlämnas till fleranvändarskalet.
Dessutom kör detta också ditt program innan Pi: s X-Windows-system startar, vilket innebär att ditt program körs redan innan du loggar in på systemet. Om du vill att ett skript ska köras innan du loggar in på din Raspberry Pi, kan du göra det.
Ovanstående kodrader fungerar för icke-GUI-program. Om du vill köra ett GUI-program med systemd bör du dock lägga till följande kod i din servicefil:
[Enhet]
Beskrivning = PiCounter
After = network.target
[Service]
Miljö = Display =: 0
Miljö = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Starta om = alltid
[Installera]
WantedBy = multi-user.target
I ovanstående direktiv-värde-par är allt du behöver ändra värdet för ExecStart direktiv. Byt ut den i kodblocket med det program du vill köra vid start. När du har fyllt i servicefilen trycker du på CTRL + O för att spara det.
Testa tjänsten
Med tjänsten klar, verifiera manuellt om den fungerar. För detta skriver du följande kommando i terminalen: sudo systemctl starta display.service. Tjänsten ska utföra dina instruktioner framgångsrikt.
När det väl gör det, avsluta det med sudo systemctl stoppa display.service.
Aktivera tjänsten
Om du lyckades köra programmet med hjälp av tjänsten är det dags att aktivera det så att det körs automatiskt varje gång du startar upp din Raspberry Pi.
För att göra detta, skriv sudo systemctl aktivera display.service i terminalfönstret. Och när det är klart, gå in omstart av sudo för att starta om din Pi.
När din Raspberry Pi startar bör systemd köra ditt program enligt dina angivna instruktioner.
Automatisering av programlansering vid start på Raspberry Pi
Som de flesta Linux-system låter Raspberry Pi OS dig också utföra operationer på flera sätt, och det är fortfarande sant att planera programlanseringar också. Så om du vill starta GUI-program / skript vid start och vill ha bättre kontroll över din schemaläggning är systemd helt klart en bättre metod.
Med det sagt, men om du vill ha en enklare lösning eller om dina projektkrav kräver specifik schemaläggning, kan du kolla vår guide till Kör ett Raspberry Pi-program eller skript vid start att lära sig mer.
Vill du få mer av din Raspberry Pi? Här är massor av användbara kommandon för att navigera i Pi-terminalen och programmera dess GPIO-stift.
Läs Nästa
- DIY
- Raspberry Pi
Yash är en Staff Writer på MUO för DIY, Linux, programmering och säkerhet. Innan han hittade sin passion skriftligen brukade han utvecklas för webben och iOS. Du kan också hitta hans skrivande på TechPP, där han täcker andra vertikaler. Förutom teknik tycker han om att prata om astronomi, formel 1 och klockor.
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Ett steg till…!
Bekräfta din e-postadress i e-postmeddelandet som vi just skickade till dig.