Kako stvoriti i pokrenuti nove servisne jedinice u Systemd


Prije nekoliko dana naišao sam na Centos 8 32-bitnu distribuciju i osjetio sam želju testirati je na starom 32-bitnom stroju. Nakon dizanja shvatio sam da ima grešku i da gubi mrežnu vezu, koju sam morao “gore” ručno svaki put nakon dizanja. Dakle, pitanje je bilo kako mogu postaviti skriptu da radi ovaj posao, da se pokreće svaki put kad dignem svoj stroj?

Pa, ovo je vrlo jednostavno i pokazat ću vam sistemski način pomoću servisnih jedinica. Ali prvo mali uvod u servisne jedinice.

U ovom ću članku objasniti što je "uslužna jedinica" u systemd-u i koliko ju je jednostavno izraditi i pokrenuti. Pokušat ću pojednostaviti što su “mete”, zašto ih zovemo “zbirke jedinica” i koje su njihove “želje”. Konačno, iskorištavamo prednost servisne jedinice za pokretanje vlastite skripte nakon postupka dizanja.

Očito je da je vaše računalo korisno zbog usluga koje nudi, a da biste imali ovu funkcionalnost, mnoge usluge moraju se pozvati dok se računalo pokreće i doseže različite razine.

Druge usluge se pozivaju da se izvrše kada računalo dosegne, na primjer, razinu spašavanja (runlevel 0), a ostale kada dosegne višekorisničku razinu (runlevel 3) . Možete zamisliti ove razine kao mete.

Na jednostavan način, cilj je skup uslužnih jedinica. Ako želite pogledati servisne jedinice koje rade na vašoj razini graphical.target, upišite:

systemctl --type=service

Kao što vidite, neke usluge su aktivne i “pokrenute” cijelo vrijeme, dok se druge pokreću jednokratno i prekidaju (izlaze).

Ako želite provjeriti status usluge, možete koristiti naredbu systemctl kao što je prikazano.

systemctl status firewalld.service

Kao što vidite, provjerio sam status firewalld.service (savjet: možete koristiti automatsko dovršavanje za naziv usluge ). Obavještava me da je servis firewalld pokrenut cijelo vrijeme i da je omogućen.

Omogućeno i onemogućeno znači da će usluga biti trajno učitana ili ne, tijekom sljedećeg pokretanja. S druge strane, pokretanje i zaustavljanje usluge ima ograničenje trenutne sesije i nije trajno.

Na primjer, ako upišete:

systemctl stop firewalld.service
systemctl status firewalld.service

Možete vidjeti da je firewalld.service neaktivan (mrtav), ali je još uvijek uključen, što znači da će se učitati tijekom sljedećeg pokretanja. Dakle, ako želimo da se usluga učitava tijekom pokretanja u budućnosti, moramo je omogućiti. Kakav sjajan zaključak! Stvorimo jedan, lako je.

Ako odete u mapu:

cd /etc/systemd/system
ls -l

Možete vidjeti neke datoteke poveznica usluga jedinice i neke direktorije “želja” cilja. Na primjer, ono što višekorisnički cilj želi da se učita kada postupak dizanja dosegne svoju razinu, navedeno je u direktoriju s nazivom /etc/systemd/system/multi-user.target.wants/ .

ls multi-user.target.wants/

Kao što vidite, ne sadrži samo usluge već i druge ciljeve koji su također zbirke usluga.

Napravimo jedinicu usluge s nazivom connection.service.

vim connection.service

i upišite sljedeće (pritisnite “i” za način umetanja), spremite to i izađite (s “esc” i “:wq! ”) :

[Unit]
Description = making network connection up
After = network.target

[Service]
ExecStart = /root/scripts/conup.sh

[Install]
WantedBy = multi-user.target

Da objasnimo gore navedeno: stvorili smo jedinicu tipa usluge (također možete kreirati jedinice ciljane vrste) i postavili smo da se učitava nakon network.target (možete razumjeti da postupak dizanja dostiže ciljeve definiranim redoslijedom) i želimo da svaki put kada usluga počne izvršavati bash skriptu pod nazivom conup.sh koju ćemo kreirati.

Zabava počinje zadnjim dijelom [instaliraj]. Govori da će ga željeti “multi-user.target ”. Dakle, ako omogućimo našu uslugu, stvorit će se simbolična poveznica na tu uslugu unutar mape multi-user.target.wants! kužiš A ako ga onemogućimo, ta poveznica će biti izbrisana. Tako jednostavno.

Samo ga omogućite i provjerite:

systemctl enable connection.service

Obavještava nas da je kreirana simbolička veza u mapi multi-user.target.wants. Možete potvrditi pokretanjem naredbe ls kao što je prikazano.

ls multi-user.target.wants/

Kao što vidite “connection.service ” je spreman za sljedeće dizanje, ali prvo moramo stvoriti datoteku skripte.

cd /root
mkdir scripts
cd scripts
vim conup.sh

Dodajte sljedeći redak u Vim i spremite ga:

#!/bin/bash
nmcli connection up enp0s3

Naredba nmcli za uspostavljanje mrežne veze za sučelje enp0s3.

Naravno, ako želite da vaša skripta izvrši nešto drugo, možete upisati što god želite umjesto drugog retka.

Na primjer,

#!/bin/bash
touch /tmp/testbootfile

koji bi stvorio datoteku unutar mape /tmp (samo da provjerite radi li vaša usluga).

Skriptu također moramo učiniti izvršnom izvođenjem naredbe chmod kao što je prikazano.

chmod +x conup.sh

Sada smo spremni. Ako ne želite čekati do sljedećeg pokretanja (već je omogućeno), možemo pokrenuti uslugu za trenutnu sesiju upisivanjem:

systemctl start connection.service

Voila! Moja veza radi!

Ako ste odabrali napisati naredbu “touch /tmp/testbootfile ” unutar skripte, samo da biste provjerili njezinu funkcionalnost, vidjet ćete ovu datoteku stvorenu unutar mape /tmp .

Stvarno se nadam da ću vam pomoći shvatiti o kojim se uslugama, željama, ciljevima i skriptama koje se izvode tijekom dizanja radi.