Kuidas luua ja käitada Systemdis uusi teenuseüksusi Shelli skripti abil


Mõni päev tagasi puutusin kokku Centos 7 32-bitise distrooga ja tundsin soovi katsetada seda vanal 32-bitisel masinal. Pärast käivitamist mõistsin, et sellel on viga ja see kaotab võrguühenduse, mille ma pidin selle iga kord pärast käivitamist käsitsi üles keerama. Seega tekkis küsimus, kuidas saaksin seda tööd tegema skripti, käivitades iga kui ma oma masina käivitan?

Noh, see on väga lihtne ja ma näitan teile teenusüksuste abil süsteemipõhist viisi. Aga kõigepealt väike sissejuhatus teenindusüksustesse.

Selles artiklis selgitan, mis on\"teenuseüksus \" süsteemisd, kui lihtne on seda luua ja käitada. Püüan lihtsustada, mis on\"sihtmärgid \", miks me neid\"kogudeks \" kutsume ühikud ”ja mis on nende \” soovid “. Lõpuks kasutame teenuseüksuse eeliseid oma skripti käivitamiseks pärast alglaadimisprotseduuri.

On ilmne, et teie arvuti on kasulik tänu pakutavatele teenustele ja selle funktsionaalsuse saamiseks tuleb paljusid teenuseid kutsuda kui arvuti käivitamist ja see jõuab erinevatele tasanditele. Teisi teenuseid kutsutakse täitma siis, kui arvuti saavutab näiteks päästetaseme (käitustaseme 0), ja teisi, kui see jõuab mitme kasutaja tasemeni (käitustasem 3). Võite neid tasemeid sihtmärkidena ette kujutada.

Lihtsal viisil on sihtmärk teenuseüksuste kogu. Kui soovite vaadata teenuse üksusi, mis töötavad teie graafilise.sihtmärgi tasemel, tippige:

# systemctl --type=service

Nagu näete, on mõned teenused aktiivsed ja "töötavad" kogu aeg, teised aga töötavad ühekordselt ja lõpetavad (lõpetavad). Kui soovite kontrollida teenuse olekut, tippige:

# systemctl status firewalld.service

Nagu näete, kontrollisin firewalld.service olekut (näpunäide: saate teenuse nime jaoks kasutada automaatse täitmise funktsiooni). See annab mulle teada, et tulemüüri teenus töötab kogu aeg ja see on lubatud.

Lubatud ja keelatud tähendab, et teenus laaditakse vastavalt järgmisele alglaadimisele püsivalt või mitte. Teiselt poolt on teenuse käivitamiseks ja peatamiseks praeguse seansi piirang ja see pole püsiv.

Näiteks kui tippite:

# systemctl stop firewalld.service
# systemctl status firewalld.service

Näete, et firewalld.service on passiivne (surnud), kuid see on endiselt lubatud, mis tähendab, et järgmise laadimise ajal laaditakse see. Nii et kui me tahame, et teenus laaditaks tulevikus alglaadimise ajal, peame selle lubama. Milline suurepärane järeldus! Laseb selle luua, see on lihtne.

Kui lähete kausta:

# cd /etc/systemd/system
# ls -l

Näete mõnda üksusteenuste lingifaili ja mõnda sihtmärgi\"soovide» kataloogi. Näiteks: mida mitme kasutaja sihtmärk soovib laadida, kui alglaadimisprotseduur jõuab tasemeni, on kataloogis loetletud nimega /etc/systemd/system/multi-user.target.wants/.

# ls multi-user.target.wants/

Nagu näete, ei sisalda see ainult teenuseid, vaid ka muid sihtmärke, mis on samuti teenuste kogumid.

Teeme teenuseüksuse nimega connection.service.

# vim connection.service

ja tippige järgmine (sisestusrežiimi saamiseks vajutage klahvi \"i" ), salvestage see ja väljuge (funktsioonidega \"esc" ja \": wq!" ):

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

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

[Install]
WantedBy = multi-user.target

Eeltoodu selgitamiseks: oleme loonud teenuse tüübi ühiku (saate luua ka sihttüübi üksusi), oleme seadistanud selle laadimiseks pärast network.target (saate aru, et alglaadimisprotseduur jõuab sihtmärkidele määratletud tellimus) ja me tahame, et teenus hakkaks iga kord käivitama bashi skripti nimega conup.sh, mille me loome.

Lõbu algab viimase osaga [install]. See ütleb, et seda soovib\"multi-user.target". Nii et kui lubame oma teenuse, luuakse kausta multi-user.target.wants sümboolne link selle teenusega! Kas olete aru saanud? Ja kui me keelame see link kustutatakse. Nii lihtne.

Lihtsalt lubage see ja kontrollige:

# systemctl enable connection.service

see annab meile teada, et kaustas multi-user.target.wants on loodud sümboolne link. Vaata seda:

# ls multi-user.target.wants/

Nagu näete, on\"connection.service" järgmiseks käivitamiseks valmis, kuid kõigepealt peame looma skriptifaili.

# cd /root
# mkdir scripts
# cd scripts
# vim conup.sh

Lisage järgmine rida VIM-i ja salvestage see:

#!/bin/bash
nmcli connection up enp0s3

Muidugi, kui soovite, et skript käivitaks midagi muud, võite teise rea asemel kirjutada mis iganes soovite.

Näiteks,

#!/bin/bash
touch /tmp/testbootfile

mis looks kausta/tmp faili (lihtsalt selleks, et kontrollida, kas teie teenus töötab).

Samuti peame skripti käivitatavaks tegema:

# chmod +x conup.sh

Nüüd oleme valmis. Kui te ei soovi järgmise alglaadimiseni oodata (see on juba lubatud), võime teenuse käivitada praeguse seansi sisestamise jaoks:

# systemctl start connection.service

Voila! Minu ühendus on toiminud!

Kui olete skripti kirjutanud käsu\"touch/tmp/testbootfile \", näete selle funktsiooni kontrollimiseks lihtsalt kausta/tmp.

Loodan tõesti aidata teil välja selgitada, millised teenused, soovid, sihid ja skriptide käivitamine käivitamise ajal on.