Kako kreirati i pokrenuti nove servisne jedinice u Systemd-u


Prije nekoliko dana naišao sam na Centos 8 32-bitnu distribuciju i osjetio sam želju da je testiram na staroj 32-bitnoj mašini. Nakon pokretanja, shvatio sam da ima grešku i da gubi mrežnu vezu, što sam morao ručno “pojačati” svaki put nakon pokretanja. Dakle, pitanje je bilo kako mogu postaviti skriptu da radi ovaj posao, da se pokreće svaki put kada pokrenem svoju mašinu?

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

U ovom članku ću objasniti šta je “servisna jedinica” u systemd-u i kako je lako kreirati i pokrenuti. Pokušat ću pojednostaviti šta su “ciljevi ”, zašto ih zovemo ”zbirke jedinica ” i koje su njihove ”želje”. Konačno, koristimo prednost servisne jedinice za pokretanje vlastite skripte nakon procedure pokretanja.

Očigledno je da je vaš računar koristan zbog usluga koje nudi, a da bi imali ovu funkcionalnost, mnoge usluge moraju biti pozvane dok se računar pokreće i dostiže različite nivoe.

Druge usluge se pozivaju da se izvrše kada računar dostigne, na primjer, nivo spašavanja (runlevel 0) i druge kada dostigne višekorisnički nivo (runlevel 3) . Ove nivoe možete zamisliti kao mete.

Na jednostavan način, target je skup uslužnih jedinica. Ako želite pogledati uslužne jedinice koje rade na vašem graphical.target nivou, upišite:

systemctl --type=service

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

Ako želite provjeriti status usluge, možete koristiti systemctl naredbu 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 usluga firewalld radi cijelo vrijeme i da je omogućena.

Omogućeno i onemogućeno znači da će usluga biti trajno učitana ili ne, tokom 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 i dalje omogućen, što znači da će se prilikom sljedećeg pokretanja učitati. Dakle, ako želimo da se usluga učitava tokom pokretanja u budućnosti, moramo je omogućiti. Kakav sjajan zaključak! Hajde da ga napravimo, lako je.

Ako odete u folder:

cd /etc/systemd/system
ls -l

Možete vidjeti neke datoteke linkova servisa jedinica i neke direktorije “želi ” cilja. Na primjer, ono što višekorisnički cilj želi da se učita kada procedura pokretanja dostigne svoj nivo, navedeno je u direktoriju s imenom /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 servisnu jedinicu pod nazivom connection.service.

vim connection.service

i upišite sljedeće (pritisnite “i ” za način umetanja), sačuvajte ga i izađite (sa “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: kreirali smo jedinicu tipa usluge (možete kreirati i jedinice ciljnog tipa), i postavili smo da se učitava nakon network.target (možete razumjeti da procedura pokretanja dostiže ciljeve sa definisanim redosledom) i želimo svaki put kada servis počne da izvršava bash skriptu sa imenom conup.sh koju ćemo kreirati.

Zabava počinje sa posljednjim dijelom [instaliraj]. Kaže da će ga željeti “multi-user.target ”. Dakle, ako omogućimo našu uslugu, simbolična veza do te usluge će biti kreirana unutar multi-user.target.wants foldera! Jasno? A ako ga onemogućimo taj link će biti izbrisan. Tako jednostavno.

Samo ga omogućite i provjerite:

systemctl enable connection.service

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

ls multi-user.target.wants/

Kao što možete vidjeti “connection.service ” je spreman za sljedeće pokretanje, ali prvo moramo kreirati datoteku skripte.

cd /root
mkdir scripts
cd scripts
vim conup.sh

Dodajte sljedeći red unutar Vima i sačuvajte ga:

#!/bin/bash
nmcli connection up enp0s3

Komanda nmcli za pokretanje mrežne veze za enp0s3 interfejs.

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

Na primjer,

#!/bin/bash
touch /tmp/testbootfile

koji bi kreirao fajl unutar /tmp foldera (samo da provjerimo da li vaš servis radi).

Također moramo učiniti skriptu izvršnom tako što ćemo pokrenuti naredbu chmod kao što je prikazano.

chmod +x conup.sh

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

systemctl start connection.service

Voila! Moja veza je uspostavljena i radi!

Ako ste odabrali da napišete naredbu “touch /tmp/testbootfile ” unutar skripte, samo da provjerite njenu funkcionalnost, vidjet ćete ovu datoteku kreiranu unutar /tmp foldera .

Zaista se nadam da ću vam pomoći da shvatite o čemu se radi o uslugama, željama, ciljevima i pokretanju skripti tokom pokretanja.