Kaip sukurti ir paleisti naujus paslaugų vienetus sistemoje Systemd


Prieš kelias dienas susidūriau su Centos 8 32 bitų distribucija ir pajutau norą jį išbandyti sename 32 bitų įrenginyje. Paleidęs supratau, kad jame yra klaida ir prarandamas tinklo ryšys, kurį kiekvieną kartą po įkrovos turėjau įjungti „aukštyn“ rankiniu būdu. Taigi, iškilo klausimas, kaip galėčiau nustatyti šį darbą atliekantį scenarijų, kuris veiktų kiekvieną kartą paleidus kompiuterį?

Na, tai labai paprasta ir aš jums parodysiu sistemos būdą, kaip naudoti paslaugų vienetus. Bet pirmiausia mažas įvadas į aptarnavimo padalinius.

Šiame straipsnyje paaiškinsiu, kas yra „paslaugų vienetas“ sistemoje „systemd“ ir kaip lengva jį sukurti bei paleisti. Pabandysiu supaprastinti, kas yra „tikslai“, kodėl juos vadiname „vienetų rinkiniais“ ir kokie yra jų „norai“. Galiausiai, mes naudojame aptarnavimo bloką, kad paleistume savo scenarijų po įkrovos procedūros.

Akivaizdu, kad jūsų kompiuteris yra naudingas dėl jo siūlomų paslaugų, o norint turėti šį funkcionalumą, daugelis paslaugų turi būti vadinamos kompiuterio paleidimu ir pasiekia skirtingus lygius.

Kitos paslaugos raginamos vykdyti, kai kompiuteris pasiekia, pavyzdžiui, gelbėjimo lygį (0 vykdymo lygis), o kitas - kai pasiekia kelių naudotojų lygį (3 vykdymo lygis) . Šiuos lygius galite įsivaizduoti kaip tikslus.

Paprastais žodžiais tariant, target yra paslaugų vienetų rinkinys. Jei norite peržiūrėti paslaugų vienetus, veikiančius jūsų graphical.target lygyje, įveskite:

systemctl --type=service

Kaip matote, kai kurios paslaugos yra aktyvios ir „veikia“ visą laiką, o kitos veikia vieną kartą ir nutrūksta (išjungiamos).

Jei norite patikrinti paslaugos būseną, galite naudoti komandą systemctl, kaip parodyta.

systemctl status firewalld.service

Kaip matote, patikrinau firewall.service būseną (patarimas: paslaugos pavadinimui galite naudoti automatinį užbaigimą ). Ji man praneša, kad užkardos paslauga veikia visą laiką ir yra įjungta.

Įjungta ir išjungta reiškia, kad paslauga bus visam laikui įkelta arba ne, atitinkamai per kitą įkrovą. Kita vertus, norint pradėti ir sustabdyti paslaugą, yra esamos sesijos apribojimas ir jis nėra nuolatinis.

Pavyzdžiui, jei įvesite:

systemctl stop firewalld.service
systemctl status firewalld.service

Matote, kad firewalld.service yra neaktyvus (neveikiantis), bet vis tiek įjungtas, o tai reiškia, kad per kitą įkrovą ji bus įkelta. Taigi, jei norime, kad paslauga ateityje būtų įkelta įkrovos metu, turime ją įjungti. Kokia puiki išvada! Sukurkime vieną, tai paprasta.

Jei einate į aplanką:

cd /etc/systemd/system
ls -l

Galite matyti kai kuriuos vieneto paslaugų nuorodų failus ir kai kuriuos paskirties „norų“ katalogus. Pavyzdžiui, ką norima įkelti kelių naudotojų taikinys, kai įkrovos procedūra pasiekia savo lygį, pateikiama kataloge pavadinimu /etc/systemd/system/multi-user.target.wants/ .

ls multi-user.target.wants/

Kaip matote, jame nėra tik paslaugų, bet ir kitų tikslų, kurios taip pat yra paslaugų rinkiniai.

Sukurkime paslaugų vienetą pavadinimu connection.service.

vim connection.service

ir įveskite šį (paspauskite “i ”, jei norite įterpti režimą), išsaugokite jį ir išeikite (su “esc ” ir “:wq! ” >>) :

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

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

[Install]
WantedBy = multi-user.target

Norėdami paaiškinti tai, kas išdėstyta aukščiau: sukūrėme paslaugos tipo vienetą (taip pat galite sukurti tikslinio tipo vienetus) ir nustatėme, kad jis būtų įkeltas po network.target (galite suprasti, kad paleidimo procedūra pasiekia tikslus nustatyta tvarka) ir mes norime kiekvieną kartą, kai paslauga pradeda vykdyti bash scenarijų pavadinimu conup.sh, kurį ketiname sukurti.

Linksmybės prasideda nuo paskutinės dalies [įdiegti]. Jame nurodoma, kad jo norės „multi-user.target“. Taigi, jei įjungsime paslaugą, aplanke multi-user.target.wants bus sukurta simbolinė nuoroda į tą paslaugą! Supratau? Ir jei ją išjungsime, ta nuoroda bus ištrinta. Taip paprasta.

Tiesiog įjunkite ir patikrinkite:

systemctl enable connection.service

Ji informuoja, kad buvo sukurta simbolinė nuoroda aplanke multi-user.target.wants. Galite patvirtinti paleisdami komandą ls, kaip parodyta.

ls multi-user.target.wants/

Kaip matote, „connection.service“ yra paruoštas kitam paleidimui, tačiau pirmiausia turime sukurti scenarijaus failą.

cd /root
mkdir scripts
cd scripts
vim conup.sh

Įtraukite šią eilutę prie Vim ir išsaugokite ją:

#!/bin/bash
nmcli connection up enp0s3

nmcli komanda, skirta enp0s3 sąsajos tinklo ryšiui iškviesti.

Žinoma, jei norite, kad scenarijus vykdytų ką nors kita, vietoj antrosios eilutės galite įvesti ką tik norite.

Pavyzdžiui,

#!/bin/bash
touch /tmp/testbootfile

kuris sukurtų failą aplanke /tmp (tik patikrinti, ar paslauga veikia).

Taip pat turime padaryti scenarijų vykdomąjį paleisdami komandą chmod, kaip parodyta.

chmod +x conup.sh

Dabar mes pasiruošę. Jei nenorite laukti iki kito įkrovimo (jis jau įjungtas), galime paleisti dabartinės sesijos paslaugą įvesdami:

systemctl start connection.service

Voila! Mano ryšys veikia ir veikia!

Jei pasirinkote scenarijaus viduje įrašyti komandą "touch /tmp/testbootfile", kad patikrintumėte jo funkcionalumą, pamatysite šį failą, sukurtą aplanke /tmp. .

Labai tikiuosi, kad padėsiu išsiaiškinti, kokios yra paslaugos, norai, tikslai ir scenarijų vykdymas paleidžiant.