Raspberry Pi este un SBC puternic (computer de bord unic) pe care îl puteți utiliza pentru diverse aplicații și proiecte. Versatilitatea sa constă în capacitatea sa de a rula tot felul de programe, inclusiv scripturi personalizate, datorită în parte sistemului de operare Raspberry Pi și altor sisteme de operare bazate pe Linux pe care le rulează.
Rularea unui script sau program pe Raspberry Pi este la fel de simplă ca găsirea pe sistem și executarea acestuia. Dar dacă doriți să automatizați acest proces, poate pentru că proiectul dvs. necesită acest lucru sau pentru că doriți să vă simplificați fluxul de lucru?
Un răspuns la aceasta este învățarea modului de utilizare a systemd.
Ce este Systemd?
systemd este o suită de componente de sistem pentru configurarea și comportamentul serviciilor pe sistemele Linux moderne. Este identificat cu un PID (identificator proces) din 1, deoarece este primul proces care pornește la pornirea sistemului. În general, scopul systemd este de a vă ajuta cu gestionarea și executarea programelor la pornirea sistemului. Și asta este ceea ce veți folosi pentru a lansa programul la pornirea pe Pi.
După cum sa menționat inițial, există mai multe metode pentru a rula programe la pornire pe sisteme Linux, cum ar fi rc.local, cron și autostart. Cu toate acestea, systemd se întâmplă cu o soluție mai bună a lotului dacă doriți să lansați programe GUI (interfață grafică pentru utilizator), automatizați aplicațiile pentru a rula după începerea anumitor procese de sistem sau rulați programe din nou și din nou până la planificarea dvs. lucrări.
Legate de: Cum să programați sarcini în Linux cu Cron și Crontab
Cum se folosește systemd pentru a lansa programe la pornire
systemd este o metodă puțin mai complicată de lansare a programelor la pornire pe sistemele Linux. Cu toate acestea, flexibilitatea de programare pe care o oferă față de alte metode - cele pe care le-am menționat mai sus - depășește în totalitate complexitatea sa în fiecare aspect.
Metoda systemd utilizează fișiere unitare, care sunt un fel de fișiere .ini care conțin informații de codificare despre dispozitive, servicii, socket-uri, țintă de pornire și alte componente esențiale ale sistemului.
Fișierele unității sunt de diferite tipuri. Deci, pe baza tipului de resursă pe care doriți să o declarați, trebuie să alegeți un tip de fișier unitate în consecință. Cu toate acestea, în scopul acestui ghid, vom rămâne la fișierele .service unitate, care vă permit să gestionați comportamentul de pornire a programelor și scripturilor de pe sistem.
Mai jos este prezentată o defalcare a pașilor implicați în lansarea unui script / program la pornire folosind systemd.
Crearea unui serviciu
Pentru a seta programul să ruleze la pornire, creați un fișier de unitate de service care să îi spună sistemului ce program să ruleze și când. Iată cum să o faci.
- În fereastra CLI, tastați sudo nano /lib/systemd/system/display.service. Puteți utiliza orice nume pentru serviciul dvs., atâta timp cât acesta se termină cu extensia .service.
- În fișierul de servicii, lipiți următoarele linii de cod:
[Unitate]
Descriere = PiCounter
După = network.target
[Serviciu]
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Restart = întotdeauna
Utilizator = pi
[Instalare]
WantedBy = multi-user.target
Toate opțiunile dvs. de configurare obișnuite se încadrează în Unitate și Instalare secțiuni, în timp ce opțiunile de configurare specifice serviciului intră în secțiunea Serviciu.
Câteva dintre perechile directivă-valoare de mai sus pe care ar trebui să le modificați includ:
eu. După: Determină când să porniți serviciul. Setarea la rețea. țintă se asigură că valoarea listată - network.target în acest caz - începe înainte de a începe unitatea curentă. Cu toate acestea, nu direcționează o relație de dependență pentru a declanșa serviciul; acest lucru se face prin alte directive, cum ar fi Wants, Requires și WantedBy.
Desigur, puteți modifica această valoare pentru a se potrivi cerințelor proiectului dumneavoastră. De exemplu, dacă doriți ca programul dvs. să se execute după ce Raspberry Pi se conectează la o rețea, puteți utiliza network-online.target valoare. Vă puteți referi la Documentația Fedora despre systemd pentru a afla mai multe despre aceste valori.
ii. ExecStart: Deține calea absolută și numele programului / scriptului pe care doriți să îl executați la pornire. Deci, în funcție de ceea ce doriți să executați, trebuie să adăugați valori pentru ambele directive.
iii. Utilizator: Identifică numele Raspberry Pi. Dacă v-ați schimbat numele Pi, trebuie să puneți acea valoare pentru utilizator.
iv. WantedBy: Este cel mai comun mod de a specifica declanșatorul pentru o unitate. Prin setarea la multi-user.target, puteți stabili o relație de dependență care va rula programul atunci când controlul sistemului este predat shell-ului multi-utilizator.
Mai mult, acest lucru rulează și programul dvs. înainte de pornirea sistemului X-Windows al lui Pi, ceea ce înseamnă că programul dvs. rulează chiar înainte de a vă conecta la sistem. În cazul în care doriți să ruleze un script înainte de a vă conecta la Raspberry Pi, acest lucru vă permite să faceți acest lucru.
Liniile de cod de mai sus funcționează pentru programele non-GUI. Cu toate acestea, dacă doriți să rulați un program GUI utilizând systemd, ar trebui să adăugați următorul cod în fișierul de servicii:
[Unitate]
Descriere = PiCounter
După = network.target
[Serviciu]
Mediu = Afișare =: 0
Mediu = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Restart = întotdeauna
[Instalare]
WantedBy = multi-user.target
În perechea directivă-valoare de mai sus, tot ce trebuie să modificați este valoarea pentru ExecStart directivă. Înlocuiți-l pe cel din blocul de coduri cu programul pe care doriți să îl rulați la pornire. După ce ați completat fișierul de servicii, apăsați CTRL + O pentru a-l salva.
Testați serviciul
Cu serviciul gata, verificați manual dacă funcționează. Pentru aceasta, tastați următoarea comandă în terminal: sudo systemctl începe display.service. Serviciul ar trebui să execute instrucțiunile dvs. cu succes.
Odată ce o face, terminați-l cu sudo systemctl stop display.service.
Activați serviciul
Dacă ați reușit să rulați programul cu succes folosind serviciul, este timpul să îl activați, astfel încât acesta să vă execute automat programul de fiecare dată când porniți Raspberry Pi.
Pentru a face acest lucru, tastați sudo systemctl activa display.service în fereastra terminalului. Și odată ce ați terminat, intrați reporniți sudo pentru a reporni Pi.
După ce Raspberry Pi pornește, systemd ar trebui să ruleze programul conform instrucțiunilor furnizate.
Lansarea automată a programului la pornire pe Raspberry Pi
La fel ca majoritatea sistemelor Linux, sistemul de operare Raspberry Pi vă permite, de asemenea, să efectuați operațiuni în mai multe moduri și rămâne valabil și pentru lansarea programului. Deci, dacă doriți să lansați programe / scripturi GUI la pornire și doriți un control mai bun asupra programării dvs., systemd este în mod clar o metodă mai bună.
Acestea fiind spuse, însă, dacă doriți o soluție mai simplă sau cerințele proiectului dvs. necesită o programare specifică, puteți consulta ghidul nostru pentru Rularea unui program sau script Raspberry Pi la pornire pentru a afla mai multe.
Doriți să obțineți mai mult de la Raspberry Pi? Iată o mulțime de comenzi utile pentru a naviga în terminalul Pi și pentru a programa pinii GPIO.
Citiți în continuare
- DIY
- Raspberry Pi
Yash este scriitor de personal la MUO pentru bricolaj, Linux, programare și securitate. Înainte de a-și găsi pasiunea în scris, obișnuia să se dezvolte pentru web și iOS. Puteți găsi și scrierile sale pe TechPP, unde acoperă alte verticale. În afară de tehnologie, îi place să vorbească despre astronomie, Formula 1 și ceasuri.
Aboneaza-te la newsletter-ul nostru
Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Încă un pas…!
Vă rugăm să confirmați adresa de e-mail în e-mailul pe care tocmai vi l-am trimis.