Kā izveidot un palaist jaunas pakalpojumu vienības Systemd, izmantojot čaulas skriptu


Pirms dažām dienām es sastapos ar Centos 7 32 bitu distro un jutu vēlmi to izmēģināt uz vecas 32 bitu mašīnas. Pēc sāknēšanas es sapratu, ka tajā ir kļūda un tas zaudē tīkla savienojumu, un man tas katru reizi pēc sāknēšanas man bija jāpārvērš manuāli. Tātad jautājums bija, kā es varu iestatīt skriptu, kas veic šo darbu, darbojoties katru reizi, kad es sāku manu mašīnu?

Tas ir ļoti vienkārši, un es jums parādīšu sistēmu, izmantojot servisa vienības. Bet vispirms neliels ievads apkalpošanas vienībās.

Šajā rakstā es paskaidrošu, kas ir sistēmas apkalpošanas vienība, cik viegli ir to izveidot un palaist. Es centīšos vienkāršot, kas ir “mērķi”, kāpēc mēs tos saucam par “vienību kolekcijām” un kādi ir viņu “vēlmes”. Visbeidzot, mēs izmantojam pakalpojumu vienības priekšrocības, lai pēc sāknēšanas procedūras palaistu savu skriptu.

Ir skaidrs, ka jūsu dators ir noderīgs, pateicoties tā piedāvātajiem pakalpojumiem, un, lai nodrošinātu šo funkcionalitāti, daudzi pakalpojumi ir jāsauc par datora sāknēšanu un sasniedz dažādus līmeņus. Citi pakalpojumi tiek aicināti izpildīt, kad dators sasniedz, piemēram, glābšanas līmeni (0. līmenis), un citus, kad tas sasniedz vairāku lietotāju līmeni (3. līmenis). Jūs varat iedomāties šos līmeņus kā mērķus.

Vienkāršā veidā mērķis ir apkalpošanas vienību kolekcija. Ja vēlaties apskatīt pakalpojumu vienības, kas darbojas jūsu grafiskā mērķa līmenī, ierakstiet:

# systemctl --type=service

Kā redzat, daži pakalpojumi ir aktīvi un darbojas visu laiku, bet citi darbojas vienreiz un pārtrauc darbību (iziet). Ja vēlaties pārbaudīt pakalpojuma statusu, ierakstiet:

# systemctl status firewalld.service

Kā redzat, es pārbaudīju firewalld.service statusu (padoms: pakalpojuma nosaukumam varat izmantot automātisko aizpildi). Tas mani informē, ka ugunsmūra pakalpojums darbojas visu laiku un tas ir iespējots.

Iespējots un atspējots nozīmē, ka pakalpojums būs pastāvīgi ielādēts vai netiks attiecīgi nākamās sāknēšanas laikā. No otras puses, pakalpojuma sākšanai un pārtraukšanai ir šīs sesijas ierobežojums, un tas nav pastāvīgs.

Piemēram, ja rakstāt:

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

Var redzēt, ka firewalld.service nav aktīvs (miris), taču tas joprojām ir iespējots, kas nozīmē, ka nākamās sāknēšanas laikā tas tiks ielādēts. Tāpēc, ja vēlamies, lai pakalpojums tiktu ielādēts sāknēšanas laikā, mums tas ir jāiespējo. Cik lielisks secinājums! Ļauj tādu izveidot, tas ir viegli.

Ja dodaties uz mapi:

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

Jūs varat redzēt dažus vienību pakalpojumu saišu failus un dažus mērķa “vēlmju” direktorijus. Piemēram: tas, ko daudzlietotāju mērķis vēlas ielādēt, kad sāknēšanas procedūra sasniedz līmeni, ir norādīts direktorijā ar nosaukumu /etc/systemd/system/multi-user.target.wants/.

# ls multi-user.target.wants/

Kā redzat, tajā nav tikai pakalpojumu, bet arī citi mērķi, kas ir arī pakalpojumu kolekcijas.

Izveidosim pakalpojumu vienību ar nosaukumu connection.service.

# vim connection.service

un ierakstiet šo (nospiediet “i” ievietošanas režīmam), saglabājiet to un izejiet (ar “esc” un “: wq!” ):

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

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

[Install]
WantedBy = multi-user.target

Lai izskaidrotu iepriekš minēto: mēs esam izveidojuši pakalpojuma veida vienību (varat izveidot arī mērķa veida vienības), mēs esam iestatījuši to ielādēt pēc network.target (jūs varat saprast, ka sāknēšanas procedūra sasniedz mērķus ar definētu pasūtījums), un mēs vēlamies, lai pakalpojums katru reizi sāk izpildīt bash skriptu ar nosaukumu conup.sh, kuru mēs izveidosim.

Jautrība sākas ar pēdējo daļu [instalēt]. Tajā teikts, ka to vēlēsies “multi-user.target”. Tātad, ja mēs iespējosim mūsu pakalpojumu, mapē multi-user.target.wants tiks izveidota simboliska saite uz šo pakalpojumu! Sapratu? Un, ja mēs to atspējosim, saite tiks izdzēsta. Tik vienkārši.

Vienkārši iespējojiet to un pārbaudiet:

# systemctl enable connection.service

tas mūs informē, ka ir izveidota simboliskā saite mapē multi-user.target.wants. Pārbaudi:

# ls multi-user.target.wants/

Kā redzat, savienojums.service ir gatavs nākamajai sāknēšanai, taču mums vispirms jāizveido skripta fails.

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

Pievienojiet šādu rindu vim iekšienē un saglabājiet to:

#!/bin/bash
nmcli connection up enp0s3

Protams, ja vēlaties, lai skripts izpildītu kaut ko citu, otrās rindas vietā varat ierakstīt visu, ko vēlaties.

Piemēram,

#!/bin/bash
touch /tmp/testbootfile

kas izveidotu failu mapē/tmp (tikai, lai pārbaudītu, vai jūsu pakalpojums darbojas).

Mums skripts ir jāpadara izpildāms:

# chmod +x conup.sh

Tagad mēs esam gatavi. Ja jūs nevēlaties gaidīt nākamo sāknēšanu (tas jau ir iespējots), mēs varam sākt pakalpojumu pašreizējās sesijas rakstīšanai:

# systemctl start connection.service

Voila! Mans savienojums ir izveidots un darbojas!

Ja skripta iekšpusē esat izvēlējies rakstīt komandu “touch/tmp/testbootfile”, lai pārbaudītu tās funkcionalitāti, redzēsit, ka šis fails ir izveidots mapē/tmp.

Es patiešām ceru jums palīdzēt noskaidrot, kādi ir pakalpojumi, vēlmes, mērķi un skriptu palaišana sāknēšanas laikā.