Raspberry Pi er en kraftig SBC (single board computer) som du kan bruke til forskjellige applikasjoner og prosjekter. Allsidigheten ligger i evnen til å kjøre alle slags programmer, inkludert tilpassede skript, delvis takket være Raspberry Pi OS og andre Linux-baserte operativsystemer det kjører.
Å kjøre et skript eller program på Raspberry Pi er så enkelt som å finne det på systemet og utføre det. Men hva om du vil automatisere denne prosessen, kanskje fordi prosjektet ditt krever det eller fordi du vil effektivisere arbeidsflyten din?
Et svar på dette er å lære å bruke systemd.
Hva er Systemd?
systemd er en serie med systemkomponenter for tjenestekonfigurasjon og oppførsel på moderne Linux-systemer. Det er identifisert med en PID (prosessidentifikator) av 1 siden det er den første prosessen som starter opp ved systemstart. I det store og hele er systemds formål å hjelpe deg med å administrere og utføre programmer ved oppstart av systemet. Og det er det du vil utnytte for å starte programmet ditt ved oppstart på Pi.
Som nevnt innledningsvis, er det flere metoder for å kjøre programmer ved oppstart på Linux-systemer, for eksempel rc.local, cron og autostart. Imidlertid skjer systemd med en bedre løsning av partiet hvis du vil starte GUI-programmer (grafisk brukergrensesnitt), automatiser applikasjoner som skal kjøres etter at visse systemprosesser begynner, eller kjør programmer om og om igjen til planleggingen din virker.
I slekt: Hvordan planlegge oppgaver i Linux med Cron og Crontab
Hvordan bruke systemd til å starte programmer ved oppstart
systemd er en litt mer komplisert metode for å starte programmer ved oppstart på Linux-systemer. Planleggingsfleksibiliteten den gir i forhold til andre metoder - de vi har nevnt ovenfor - oppveier imidlertid fullstendig kompleksiteten i alle aspekter.
Systemd-metoden bruker enhetsfiler, som er omtrent som .ini-filer som inneholder kodingsinformasjon om enheter, tjenester, stikkontakter, oppstartsmål og andre viktige systemkomponenter.
Enhetsfiler er av forskjellige typer. Så, basert på hva slags ressurs du vil erklære, må du velge en enhetstype tilsvarende. For formålet med denne guiden vil vi imidlertid holde oss til .serviceenhetsfiler, som lar deg administrere oppstartsadferden til programmer og skript på systemet.
Nedenfor er en oversikt over trinnene som er involvert i å starte et skript / program ved oppstart ved hjelp av systemd.
Opprette en tjeneste
For å angi at programmet skal kjøres ved oppstart, oppretter du en serviceenhetsfil som forteller systemet hvilket program du skal kjøre og når. Slik gjør du det.
- Skriv inn i CLI-vinduet sudo nano /lib/systemd/system/display.service. Du kan bruke hvilket som helst navn for tjenesten din så lenge den ender med .service-utvidelsen.
- Lim inn følgende kodelinjer i servicefilen:
[Enhet]
Beskrivelse = PiCounter
Etter = nettverk.mål
[Service]
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Start på nytt = alltid
Bruker = pi
[Installere]
WantedBy = multi-user.target
Alle vanlige konfigurasjonsalternativer faller inn under Enhet og Installere seksjoner, mens de tjenestespesifikke konfigurasjonsalternativene går under Service-delen.
Noen av de ovennevnte direktivverdiparene du kanskje trenger å endre inkluderer:
Jeg. Etter: Den bestemmer når du skal starte tjenesten. Setter den til network.target sørger for at den oppførte verdien - network.target i dette tilfellet - starter før du starter den nåværende enheten. Imidlertid leder det ikke et avhengighetsforhold for at tjenesten skal utløses; det gjøres gjennom andre direktiver som Wants, Requires og WantedBy.
Selvfølgelig kan du endre denne verdien slik at den passer til prosjektets krav. Hvis du for eksempel vil at programmet skal kjøres etter at Raspberry Pi kobles til et nettverk, kan du bruke nettverk-online.target verdi. Du kan referere til Fedoras dokumentasjon på systemd for å lære mer om disse verdiene.
ii. ExecStart: Den inneholder den absolutte banen og navnet på programmet / skriptet du vil utføre ved oppstart. Så avhengig av hva du vil utføre, må du legge til verdier for begge disse direktivene.
iii. Bruker: Den identifiserer navnet på Raspberry Pi. Hvis du har endret Pi-navnet ditt, må du sette den verdien for brukeren.
iv. WantedBy: Det er den vanligste måten å spesifisere utløseren for en enhet. Ved å sette den til flerbruker.mål, kan du opprette et avhengighetsforhold som kjører programmet når systemkontrollen blir overlevert til flerbrukerskallet.
Videre kjører dette også programmet ditt før Pis X-Windows-system starter, noe som betyr at programmet kjører selv før du logger på systemet. I tilfelle du vil at et skript skal kjøres før du logger på Raspberry Pi, kan du gjøre det.
Ovennevnte kodelinjer fungerer for ikke-GUI-programmer. Men hvis du vil kjøre et GUI-program ved hjelp av systemd, bør du legge til følgende kode i tjenestefilen:
[Enhet]
Beskrivelse = PiCounter
Etter = nettverk.mål
[Service]
Miljø = Display =: 0
Miljø = XAUTHORITY / home / pi / .X autoritet
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Start på nytt = alltid
[Installere]
WantedBy = multi-user.target
I ovennevnte direktiv-verdipar er alt du trenger å endre verdien for ExecStart direktivet. Bytt ut den i kodeblokken med programmet du vil kjøre ved oppstart. Etter at du har fylt ut tjenestefilen, trykk CTRL + O for å redde den.
Test tjenesten
Med tjenesten klar, verifiser manuelt om den fungerer. For dette skriver du inn følgende kommando i terminalen: sudo systemctl start display.service. Tjenesten skal utføre instruksjonene dine.
Når det gjør det, avslutter du det med sudo systemctl stopp display.service.
Aktiver tjenesten
Hvis du klarte å kjøre programmet med hell ved hjelp av tjenesten, er det på tide å aktivere det slik at det kjøres programmet automatisk hver gang du starter opp Raspberry Pi.
For å gjøre dette, skriv inn sudo systemctl aktiver display.service i terminalvinduet. Og når det er gjort, gå inn sudo omstart for å starte Pi på nytt.
Når Raspberry Pi starter opp, bør systemd kjøre programmet ditt i henhold til de angitte instruksjonene.
Automatisering av programstart ved oppstart på Raspberry Pi
Som de fleste Linux-systemer lar Raspberry Pi OS deg også utføre operasjoner på flere måter, og det er fortsatt sant å planlegge programstart også. Så hvis du vil starte GUI-programmer / skript ved oppstart og vil ha bedre kontroll over planleggingen din, er systemd helt klart en bedre metode.
Når det er sagt, kan du sjekke vår guide til hvis du vil ha en enklere løsning eller prosjektkravene dine krever spesifikk planlegging Kjører et Raspberry Pi-program eller skript ved oppstart å lære mer.
Vil du få mer ut av din Raspberry Pi? Her er mange nyttige kommandoer for å navigere på Pi-terminalen og programmere GPIO-pinnene.
Les Neste
- DIY
- Bringebær Pi
Yash er Staff Writer ved MUO for DIY, Linux, programmering og sikkerhet. Før han fant sin lidenskap skriftlig, pleide han å utvikle seg for nettet og iOS. Du kan også finne hans forfatterskap på TechPP, hvor han dekker andre vertikaler. Annet enn teknisk, liker han å snakke om astronomi, Formel 1 og klokker.
Abonner på vårt nyhetsbrev
Bli med på nyhetsbrevet vårt for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Ett steg til…!
Bekreft e-postadressen din i e-posten vi nettopp sendte deg.