Kā izmantot systemctl pakalpojumu un vienību pārvaldībai
Linux vidē komanda systemctl ieņem centrālo lomu init sistēmas un pakalpojumu pārvaldnieka systemd administrēšanā. Ar systemctl palīdzību lietotāji var pārvaldīt systemd pakalpojumus, to vienības un konfigurācijas, tādējādi padarot to par neaizstājamu sistēmas administrēšanas rīku. No sistēmas palaišanas pārvaldības līdz sistēmas stāvokļu pielāgošanai — systemctl piedāvā plašu funkciju klāstu.
Kas ir systemctl?
systemctl ir komandrindas rīks, kas paredzēts systemd pārvaldībai — systemd ir sākuma sistēma un sistēmas pārvaldnieks Linux operētājsistēmām. Pašlaik systemd ir standarta sākuma sistēma vairākās Linux distribūcijās un Linux serveru distribūcijās, piemēram, Ubuntu, Debian, Fedora, Red Hat Enterprise Linux (RHEL), CentOS, Arch Linux, Mageia un Gentoo. Tomēr tā nav vispārēji ieviesta visās distribūcijās.
Systemd ekosistēmā rīkam systemctl ir galvenā loma sistēmas pakalpojumu pārvaldībā, konfigurēšanā, palaišanas procesa vadībā un sistēmas uzturēšanā. Šī rīka funkcionalitāte neaprobežojas tikai ar pakalpojumu palaišanu un apturēšanu. Tas nodrošina visaptverošu pārvaldību gandrīz visos Linux sistēmas aspektos.
Šajā apmācībā atradīsiet praktiskus koda piemērus un Linux komandas, kas nepieciešamas, lai izmantotu systemctl. Turpmāk minētie piemēri ir balstīti uz Ubuntu 22.04.
Pakalpojumu pārvaldība
Init sistēmas galvenais mērķis ir palaist komponentus, kas nepieciešami pēc Linux kodola uzsākšanas (lietotāja vides komponenti). Init sistēmu izmanto arī, lai efektīvi pārvaldītu pakalpojumus un dēmonus serverī jebkurā sistēmas darbības brīdī.
Sistēmā systemd lielākā daļa procesu ir saistīti ar resursiem, kurus pārvalda sistēma. Tos sauc par vienībām. Šīs vienības tiek klasificētas atbilstoši resursu veidam, ko tās pārstāv, un tiek definētas vienību failos. Vienības veidu var atpazīt pēc faila paplašinājuma.
Pārvaldot pakalpojumus, svarīgas ir pakalpojumu vienības, kuru nosaukumi beidzas ar piedēkli .service. Tomēr pakalpojumu pārvaldības komandās ne vienmēr ir nepieciešams izmantot šo piedēkli. systemd spēj atpazīt, ka šādas komandas parasti attiecas uz pakalpojumiem.
Pakalpojumu sākšana un pārtraukšana
Viena no visbiežāk veicamajām darbībām Linux sistēmā, izmantojot systemctl, ir pakalpojumu palaišana un apturēšana. Šīs funkcijas ir sistēmas administrēšanas pamats un ļauj jums kontrolēt sistēmā darbojošos procesus. Lai palaistu pakalpojumu, izmantojiet komandu start. Ja strādājat kā lietotājs bez root tiesībām, jums būs jāizmanto sudo.
$ sudo systemctl start application.servicebashTā kā systemd ir paredzēts automātiski meklēt .service failus pakalpojumu pārvaldības komandām, komandu var ievadīt arī vienkāršotā formā:
$ sudo systemctl start applicationbashPiemēram, lai palaistu Apache tīmekļa serveri, jāievada:
$ sudo systemctl start apache2bashJa vēlaties apturēt darbojošos pakalpojumu, izmantojiet stop:
$ sudo systemctl stop application.servicebashPārstartēt un atjaunināt
Lai pārstartētu pakalpojumu, kas bieži ir nepieciešams pēc konfigurācijas izmaiņām, izmantojiet komandu restart:
$ sudo systemctl restart application.servicebashJa lietojumprogramma spēj atjaunināt savus konfigurācijas failus bez pārstartēšanas, šo procesu var uzsākt, izmantojot komandu reload:
$ sudo systemctl reload application.servicebashJa neesat pārliecināts, vai pakalpojums piedāvā iespēju pārlādēt konfigurāciju, varat izmantot komandu reload-or-restart. Ja šī iespēja tiek atbalstīta, konfigurācija tiks pārlādēta. Ja tā netiek atbalstīta, komanda pārstartēs pakalpojumu, lai uzsāktu konfigurācijas atjaunināšanu.
$ sudo systemctl reload-or-restart application.servicebashPakalpojumu aktivizēšana un deaktivizēšana
Aktivizējot un deaktivizējot pakalpojumus, varat noteikt, vai pakalpojums ir jāpalaiž automātiski sistēmas sākšanas brīdī. Tas ir īpaši svarīgi sistēmas veiktspējai, drošībai un atkarību pārvaldībai starp dažādiem pakalpojumiem. Lai konfigurētu automātisko aktivizēšanu sistēmas sākšanas brīdī, izmantojiet komandu enable:
$ sudo systemctl enable application.servicebashVeicot šo darbību, tiek izveidota simboliska saite. Šī saite savieno sistēmas pakalpojuma faila kopiju. Sistēmas pakalpojuma failu parasti var atrast direktorijā /lib/systemd/system vai /etc/systemd/system. Šeit atrodas arī cietā diska direktorija, kurā systemd meklē failus automātiskai palaišanai. Parasti tas notiek direktorijā /etc/systemd/system/some_target.target.wants.
$ sudo systemctl enable application.servicebashLai pakalpojums nepalaižtos automātiski sistēmas sākšanas laikā, izmantojiet disable:
$ sudo systemctl disable application.servicebashPēc tam tiks dzēsta simboliskā saite, kas nosaka automātisku aktivizēšanu sistēmas uzsākšanas brīdī.
Uzmanību: Vienkārša pakalpojuma aktivizēšana nenozīmē, ka tas nekavējoties sāks darboties pašreizējā sesijā. Lai pakalpojumu sāktu nekavējoties un konfigurētu tā automātisku palaišanu sistēmas uzsākšanas brīdī, ir jāizpilda gan start, gan enable komanda.
Pārbaudiet pakalpojumu statusu
Komanda systemctl ļauj parādīt informāciju par pakalpojumu statusu. Tas ir īpaši noderīgi sistēmas un lietojumprogrammu pakalpojumu pašreizējā statusa uzraudzībai un diagnostikai. Lai status pārbaudi, izmantojiet komandu status
$ systemctl status application.servicebashŠī komanda sniedz dažādu informāciju, tostarp pakalpojuma pašreizējo statusu (aktīvs, neaktīvs, ar kļūdu utt.), pēdējos izpildītos procesus un žurnāla ziņojumus, cgroup hierarhiju un pirmās žurnāla rindas.
Lai ar komandu systemctl pārbaudītu pakalpojuma pašreizējo darbības statusu Linux vidē, tiek izmantota komanda is-active. Šī komanda norāda, vai pakalpojums pašlaik darbojas vai nē:
$ systemctl is-active application.servicebashPašreizējais statuss parasti tiek norādīts kā active, ja pakalpojums ir aktīvs, vai kā inactive, ja pakalpojums ir neaktīvs.
Lai pārbaudītu, vai pakalpojums ir konfigurēts tā, lai automātiski tiktu ieslēgts sistēmas uzsākšanas brīdī, var izmantot komandu is-enabled. Tas ir īpaši noderīgi, lai pārvaldītu pakalpojumu uzsākšanas konfigurāciju Linux sistēmā.
$ systemctl is-enabled application.servicebashKomanda norāda, vai pakalpojums ir ieslēgts vai izslēgts, un atbilstoši atbildei iestata iziešanas kodu uz „0“ vai „1“.
Varat arī izmantot komandu is-failed, lai pārbaudītu, vai konkrētajam pakalpojumam ir kļūdas statuss:
$ systemctl is-failed application.servicebashJa izpilde ir veiksmīga, tiek izvadīts active. Ja rodas kļūda, tiks izvadīts failed. Ja ierīce tika apzināti apturēta, kā atbilde var parādīties unknown vai inactive. Izvades statuss 0 norāda, ka ir notikusi kļūda, savukārt 1 norāda uz jebkuru citu statusu.
Sistēmas stāvoklis
Līdz šim aprakstītās komandas bija vērstas uz atsevišķu pakalpojumu pārvaldību. Tomēr šīs komandas nesniedz ieskatu sistēmas pašreizējā stāvoklī. Ir virkne systemctl komandu, kas var sniegt tieši šādu informāciju.
Komandalist-units ir noderīga, lai iegūtu pārskatu par pašreizējiem resursiem Linux sistēmā:
$ systemctl list-unitsbashKad izpildāt šo komandu, systemctl parāda sarakstu ar vienībām, kuras pārvalda systemd. Šī saraksta izvade satur dažādas ailes ar konkrētu informāciju par katru vienību. Tiek parādītas šādas ailes:
- UNIT: Vienības nosaukums (to bieži ņem no vienības faila nosaukuma, piemēram, sshd.service SSH dēmonam)
- LOAD: Norāda, vai vienības fails tika veiksmīgi ielādēts; iespējamās vērtības ir
loaded,not-foundvaierror. - ACTIVE: Vienības darbības statuss, kas var mainīties starp režīmiem, piemēram,
active,inactive,activatingvaideactivating - SUB: Pakārtotais darbības statuss, kas sniedz sīkāku informāciju par vienības stāvokli (piemēram, vienībai
activeSUB statuss var būtrunning,exitedvaifailed) - DESCRIPTION: Vienības īss apraksts, kas bieži atspoguļo vienības mērķi vai funkcionalitāti
Tomēr pēc noklusējuma šī komanda parāda tikai aktīvās vienības. Tāpēc izvades ailē „LOAD“ parasti redzams loaded, bet ailē „ACTIVE“ — active. Izmantojot papildu parametrus, komandu „systemctl“ var konfigurēt tā, lai tā parādītu arī papildu informāciju. Piemēram, izmantojot parametru --all, tiks parādītas visas vienības, kuras ir ielādējis „systemd“, neatkarīgi no to pašreizējā darbības statusa.
$ systemctl list-units --allbashRezultātus var vēl vairāk precizēt, izmantojot papildu karodziņus, piemēram, --state=, lai atlasītu konkrētas vienības kategorijās „LOAD”, „ACTIVE” vai „SUB”. Ir svarīgi saglabāt karodziņu --all, lai tiktu parādītas arī neaktīvās vienības:
$ systemctl list-units --all --state=inactivebashVarat izmantot arī filtru --type=, lai parādītu konkrētu veidu vienības, piemēram, ja vēlaties redzēt tikai aktīvā dienestā esošās vienības:
$ systemctl list-units --type=servicebashUzskaitīt visus vienību failus
Lai ar komandu systemctl parādītu visu vienību failu sarakstu Linux vidē (ieskaitot tos, kurus systemd nav mēģinājis ielādēt), varat izmantot list-unit-files. Šī komanda parāda visus vienību failus, par kuriem systemd ir informēts, tostarp pakalpojumus, soketus, mērķus un citus.
$ systemctl list-units-filesbashŠī komanda parāda dažādus vienību failu statusus. Šie statusi norāda, kā attiecīgās vienības ir konfigurētas, jo īpaši saistībā ar to darbību sistēmas uzsākšanas brīdī. Visbiežāk sastopamie statusi ir
- Ieslēgts: Ierīce ir konfigurēta tā, lai automātiski ieslēgtos sistēmas uzsākšanas brīdī.
- Atspējots: Ierīce nav konfigurēta automātiskai palaišanai sistēmas uzsākšanas procesa laikā.
- Maskēts: Vienība ir pilnībā deaktivizēta, tāpēc to nevar palaist ne manuāli, ne automātiski.
- Statiska: Vienība netiek palaista neatkarīgi, bet parasti ir atkarīga no citas vienības un tiek palaista tikai šajā kontekstā.
Vienības vadība
Viena no galvenajām systemctl funkcijām ir vienību pārvaldība. systemctl piedāvā virkni noderīgu komandu un opciju, kas atvieglo konkrētas informācijas iegūšanu par atsevišķām vienībām un to pārvaldību.
Parādīt vienības failu
Ja vēlaties, lai konkrēta vienības faila saturs tiktu parādīts tieši konsolē, varat izmantot komandu cat. Piemēram, lai apskatītu tāda pakalpojuma kā ssh.service vienības failu, ievadiet:
$ systemctl cat ssh.servicebashRādīt atkarības
Ja izmantojat list-dependencies, konkrētās vienības atkarības tiks attēlotas koka struktūrā. Komanda izskatās šādi:
$ systemctl list-dependencies sshd.servicebashParasti tiek parādītas atkarības .target vienībai, kas atspoguļo dažādus sistēmas stāvokļus. Lai iegūtu pilnīgu, rekursīvu visu atkarību sarakstu, izmantojiet --all opciju.
Lai parādītu atgriezeniskās atkarības (t. i., vienības, kas ir atkarīgas no norādītās vienības), komandai pievienojiet --reverse. Ar opcijām --before un —after varat arī apskatīt atkarības, kas sākas pirms vai pēc attiecīgās vienības.
Vienību maskēšana un demaskēšana
Vienības maskēšana faktiski to atslēdz, tādējādi neļaujot to palaist ne manuāli, ne automātiski. To bieži izmanto, lai nodrošinātu, ka pakalpojums vai vienība netiek palaista nejauši vai automātiski atkarību dēļ. Maskēšanu veic, izveidojot simbolisku saiti no attiecīgā vienības faila uz /dev/null, izmantojot komandu mask:
$ sudo systemctl mask nginx.servicebashTas nodrošina, ka Nginx pakalpojumu nevar sākt ne manuāli, ne automātiski, kamēr tas darbojas maskētajā režīmā.
Atmaskošana atceļ vienības maskēto statusu, lai to varētu atkal palaist parastā režīmā. Komanda atmaskošanai ir unmask:
$ sudo systemctl unmask nginx.servicebashVienību failu rediģēšana
Komandai systemctl ir pieejamas opcijas vienību failu pielāgošanai un rediģēšanai. Šīs funkcijas tika ieviestas ar systemd 218. versiju. Ja izmantojat komandu edit, izvēlētās vienības failu automātiski atver rediģēšanai:
$ sudo systemctl edit nginx.servicebashRediģējot tiek izveidots tukšs fails, lai pievienotu vai mainītu konkrētas instrukcijas vienības definīcijā. Katrai vienībai (piem., nginx.service) direktorijā /etc/systemd/system tiek izveidota apakšmape, kuras nosaukumam pievieno paplašinājumu .d. Iepriekš minētajā piemērā apakšmape būtu nginx.service.d.
Šajā apakšmapē tiek izveidots failu override.conf. Kad systemd ielādē vienību, tas apvieno šī fragmenta faila saturu ar sākotnējo vienības failu. Šajā gadījumā fragmenta norādēm ir prioritāte. Lai apstrādātu visu vienības failu, var izmantot --full karodziņu:
$ sudo systemctl edit --full nginx.servicebashNospiežot --full, esošais vienības fails tiek atvērts redaktorā, lai veiktu izmaiņas. Izietot no redaktora, sistēma saglabā rediģēto failu mapē /etc/systemd/system.
Lai atceltu paša veiktās izmaiņas, varat vai nu izdzēst ierīces konfigurācijas direktoriju .d, vai arī izdzēst modificēto failu /etc/systemd/system:
$ sudo rm -r /etc/systemd/system/nginx.service.dbashPilnībā pārstrādātu vienības failu var dzēst, izmantojot šādu komandu:
$ sudo rm /etc/systemd/system/nginx.servicebashPēc faila vai direktorija izdzēšanas būs nepieciešams pārstartēt systemd, lai tas vairs neatsauktos uz izdzēstajiem failiem, bet gan izmantotu sistēmas pašu kopiju:
$ sudo systemctl daemon-reloadbashSistēmas stāvokļa (darba līmeņa) pielāgošana, izmantojot mērķus
systemd galvenokārt izmanto mērķus (target), lai grupētu dažādas vienības. Tas tiek darīts, lai panāktu konkrētu sistēmas stāvokli, līdzīgi kā darbības līmeņi citās init sistēmās. Faili ar paplašinājumu .target darbojas kā orientieri, kas norāda uz noteiktu funkciju pieejamības statusu. Tas ļauj lietotājiem norādīt vēlamo kopējo stāvokli, nevis atsevišķas nepieciešamās vienības.
Praktisks piemērs ir swap.target, kas norāda uz gatavību apmaiņai. Vienības, kas iesaistītas apmaiņas procesā, var pielāgoties šim mērķim, izmantojot konfigurācijas opcijas, piemēram, WantedBy= vai RequiredBy=. Savukārt vienības, kas ir atkarīgas no apmaiņas, var to norādīt, izmantojot tādus iestatījumus kā Wants=, Requires= un After=, lai izteiktu savu atkarību un sākuma secību saistībā ar apmaiņu.
Ielādēt un iestatīt noklusējuma galamērķi
Noklusējuma mērķa izsaukšana un konfigurēšana ļauj definēt sistēmas noklusējuma stāvokli sistēmas uzsākšanas brīdī. Šādi varat atrast sistēmas noklusējuma mērķi:
$ systemctl get-default
Output
multi-user.targetbashJa vēlaties mainīt noklusējuma mērķi, izmantojiet komandu set-default kopā ar mērķa nosaukumu. Lai noklusējuma mērķi iestatītu uz graphical.target, kas palaista grafisko lietotāja saskarni, izmantojiet šādu komandu:
$ sudo systemctl set-default graphical.targetbashSaraksts ar pieejamajiem galamērķiem
Lai parādītu visus sistēmā pieejamos galamērķus, varat izmantot šādu komandu:
$ systemctl list-unit-files --type=targetbashTiek parādīts saraksts ar visiem sistēmā instalētajiem mērķa vienību failiem. Katram mērķim tiek parādīts ceļš un pašreizējais statuss (piemēram, aktivizēts vai deaktivizēts).
Izolēt mērķus
Izmantojot isolate, var vienlaikus aktivizēt visas vienības, kas ir saistītas ar konkrētu mērķi, un apturēt visas pārējās vienības, kas ar to nav saistītas.
Pieņemsim, ka jūs strādājat vidē, kurā darbojas graphical.target, un vēlaties pāriet uz tīru daudzlietotāju režīmu bez grafiskās lietotāja saskarnes. Šajā gadījumā varat atslēgt grafisko sistēmu, izolējot multi-user.target. Tā kā graphical.target ir atkarīgs no multi-user.target, bet ne otrādi, pārejas brīdī visi grafiskie pakalpojumi tiek apturēti.
Tomēr pirms mērķa izolēšanas vajadzētu pārbaudīt saistītās atkarības. Tas novērsīs svarīgu procesu nejaušu pārtraukšanu.
$ systemctl list-dependencies multi-user.targetbashJa esat atzīmējuši aktīvās vienības, kuras vēlaties saglabāt, un piekrītat to izvēlei, varat norādīt vēlamo galamērķi:
$ sudo systemctl isolate multi-user.targetbashSaīsnes svarīgiem notikumiem
Ir noteikti mērķi tādiem būtiskiem darbības posmiem kā sistēmas izslēgšana vai atkārtota palaišana. Tomēr Linux vidē komanda systemctl piedāvā arī praktiskus saīsnes, kas nodrošina papildu funkcijas. Piemēram, lai sistēmu pārslēgtu glābšanas režīmā (viena lietotāja režīmā), var vienkārši izmantot rescue vietā isolate rescue.target:
$ sudo systemctl rescuebashSistēmu var apturēt, nospiežot stop:
$ sudo systemctl stopbashAr poweroff varat uzsākt pilnīgu izslēgšanu:
$ sudo systemctl poweroffbashNo otras puses, varat uzsākt pārstartēšanu, ievadot reboot:
$ sudo systemctl rebootbashJa esat pieteicies, šīs komandas sniegs informāciju par gaidāmajiem notikumiem. Vienkārša mērķa izpilde vai izolēšana šo informāciju nesniegs. Ir svarīgi zināt, ka daudzi datori šīm darbībām paredzētās īsākās komandas saista ar systemd, lai nodrošinātu pareizu izpildi.
Lai pārstartētu sistēmu, parasti pietiek ar šādu komandu:
$ sudo rebootbash