# Kaip naudoti „systemctl“ paslaugoms ir vienetams valdyti

„Linux“ sistemoje „systemctl“ atlieka pagrindinį vaidmenį administruojant „init“ sistemą ir paslaugų tvarkyklę „systemd“. Naudodami „systemctl“, vartotojai gali valdyti „systemd“ paslaugas, jų vienetus ir konfigūracijas, todėl tai yra nepakeičiamas įrankis sistemos administravimui. Nuo paleidimo valdymo iki sistemos būsenų pritaikymo – „systemctl“ siūlo platų funkcijų spektrą.

## Kas yra „systemctl“?

„systemctl“ yra komandinės eilutės įrankis, skirtas valdyti **„systemd“** – „Linux“ operacinių sistemų paleidimo sistemą ir sistemos tvarkyklę. „systemd“ šiuo metu yra standartinė paleidimo sistema keliose „Linux“ distribucijose ir „Linux“ serverių distribucijose, tokiose kaip „Ubuntu“, „Debian“, „Fedora“, „Red Hat Enterprise Linux“ (RHEL), „CentOS“, „Arch Linux“, „Mageia“ ir „Gentoo“. Tačiau ji nėra visuotinai įdiegta visose distribucijose.

„systemd“ ekosistemoje „systemctl“ atlieka **pagrindinį vaidmenį valdant sistemos paslaugas, konfigūraciją, paleidimo procesą ir atliekant sistemos priežiūrą**. Šio įrankio funkcionalumas apima ne tik paslaugų paleidimą ir sustabdymą. Jis suteikia galimybę visapusiškai valdyti beveik visus Linux sistemos aspektus.

Šiame vadove rasite praktinių kodo pavyzdžių ir [Linux komandų](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/linux-komandos-terminalo-komandu-apzvalga/), skirtų dirbti su „systemctl“. Toliau pateikti pavyzdžiai parengti remiantis **„Ubuntu 22.04**“ versija.

## Paslaugų valdymas

Pagrindinis „init“ sistemos tikslas – paleisti komponentus, kurie reikalingi po Linux branduolio paleidimo (vartotojo aplinkos komponentai). „Init“ sistema taip pat naudojama tam, kad būtų galima veiksmingai valdyti serverio paslaugas ir demonus bet kuriuo sistemos veikimo metu.

„systemd“ sistemoje dauguma procesų yra susiję su ištekliais, kuriuos valdo sistema. Jie vadinami **vienetais**. Šie vienetai klasifikuojami pagal išteklių, kuriuos jie atstovauja, tipą ir apibrėžiami vienetų failuose. Vieneto tipą galima atpažinti pagal jo failo plėtinį.

Valdant paslaugas, svarbūs yra paslaugų vienetai, kurių pavadinimai baigiasi priesaga *.service.* Tačiau paslaugų valdymo komandose ne visada būtina naudoti šią priesagą. „systemd“ gali atpažinti, kad tokios komandos paprastai yra susijusios su paslaugomis.

### Paleisti ir sustabdyti paslaugas

Viena iš dažniausiai atliekamų užduočių Linux sistemoje naudojant „systemctl“ yra paslaugų paleidimas ir sustabdymas. Šios funkcijos yra esminės sistemos administravimui ir leidžia kontroliuoti sistemoje vykdomus procesus. Norėdami paleisti paslaugą, naudokite komandą `start`. Jei dirbate kaip vartotojas be administratoriaus teisių, turėsite naudoti `sudo`.

```bash
$ sudo systemctl start application.service
```

Kadangi „systemd“ yra sukurta taip, kad automatiškai ieškotų *.service* failų, skirtų paslaugų valdymo komandoms, šią komandą taip pat galima įvesti supaprastinta forma:

```bash
$ sudo systemctl start application
```

Pavyzdžiui, norėdami paleisti „Apache“ žiniatinklio serverį, įveskite:

```bash
$ sudo systemctl start apache2
```

Jei norite sustabdyti veikiančią paslaugą, naudokite `stop`:

```bash
$ sudo systemctl stop application.service
```

### Perkraukite ir atnaujinkite

Norėdami iš naujo paleisti paslaugą, o tai dažnai būtina po konfigūracijos pakeitimų, naudokite komandą `restart`:

```bash
$ sudo systemctl restart application.service
```

Jei programa gali iš naujo įkelti savo **konfigūracijos failus be perkrovimo**, šį procesą galima pradėti naudojant komandą `reload` “:

```bash
$ sudo systemctl reload application.service
```

Jei nesate tikri, ar paslauga palaiko konfigūracijos perkrovimo funkciją, galite naudoti komandą `reload-or-restart` “. Jei ši funkcija palaikoma, komanda perkraus konfigūraciją. Jei ji nepalaikoma, komanda iš naujo paleis paslaugą, kad būtų pradėtas konfigūracijos atnaujinimas.

```bash
$ sudo systemctl reload-or-restart application.service
```

### Įjungti ir išjungti paslaugas

Įjungdami ir išjungdami paslaugas, galite nustatyti, ar paslauga turi būti paleidžiama automatiškai paleidus sistemą. Tai ypač svarbu sistemos našumui, saugumui ir skirtingų paslaugų tarpusavio priklausomybių valdymui. Naudokite komandą `enable`, kad sukonfigūruotumėte automatinį paleidimą paleidus sistemą:

```bash
$ sudo systemctl enable application.service
```

Atlikus šį veiksmą, sukuriamas simbolinis nuorodas. Ši nuoroda nukreipia į sistemos paslaugos failo kopiją. Sistemos paslaugos failą paprastai galima rasti kataloge */lib/systemd/system* arba */etc/systemd/system*. Čia taip pat rasite kietajame diske esantį katalogą, kuriame „systemd“ ieško failų, skirtų automatiniam paleidimui. Paprastai tai vyksta kataloge */etc/systemd/system/some\_target.target.wants*.

```bash
$ sudo systemctl enable application.service
```

Jei norite, kad paslauga nebūtų paleidžiama automatiškai paleidžiant kompiuterį, naudokite `disable`:

```bash
$ sudo systemctl disable application.service
```

Po to bus pašalinta simbolinė nuoroda, nurodanti automatinį įjungimą paleidžiant sistemą.

**Įspėjimas**: Vien tik įjungus paslaugą, ji nebus iškart paleista dabartinėje sesijoje. Norėdami iškart paleisti paslaugą ir nustatyti, kad ji paleistųsi automatiškai paleidus sistemą, turite **įvykdyti abi** komandas – `start` ir `enable`.

### Patikrinkite paslaugų būseną

Komanda „systemctl“ leidžia peržiūrėti informaciją apie paslaugų būseną. Tai ypač naudinga stebint ir diagnozuojant sistemos bei programų paslaugų dabartinę būseną. Patikrinti galite naudodami komandą `status` “:

```bash
$ systemctl status application.service
```

Ši komanda pateikia įvairią informaciją, įskaitant paslaugos dabartinę būseną (aktyvi, neaktyvi, sugedusi ir pan.), paskutinį kartą vykdytus procesus ir žurnalo pranešimus, cgroup hierarchiją bei pirmąsias žurnalo eilutes.

Norint patikrinti paslaugos veikimo būseną Linux sistemoje naudojant „systemctl“, naudojamas `is-active`. Ši komanda nurodo, ar paslauga šiuo metu veikia, ar ne:

```bash
$ systemctl is-active application.service
```

Paprastai dabartinė būsena nurodoma kaip `active`, jei paslauga aktyvi, arba kaip `inactive`, jei paslauga neaktyvi.

Norėdami patikrinti, ar paslauga yra sukonfigūruota taip, kad būtų automatiškai įjungiama paleidus sistemą, galite naudoti komandą `is-enabled`. Tai ypač naudinga tvarkant paslaugų paleidimo nustatymus „Linux“ sistemoje.

```bash
$ systemctl is-enabled application.service
```

Ši komanda nurodo, ar paslauga yra įjungta, ar išjungta, ir, atsižvelgdama į atsakymą, atitinkamai nustato išėjimo kodą „0“ arba „1“.

Taip pat galite naudoti komandą `is-failed`, kad patikrintumėte, ar konkreti **paslauga veikia su klaida**:

```bash
$ systemctl is-failed application.service
```

Jei vykdymas pavyko, išvedamas `active`. Jei įvyko klaida, bus rodomas `failed`. Jei įrenginys buvo sustabdytas sąmoningai, kaip atsakymas gali būti rodomas `unknown` arba `inactive`. Išeitimo kodas `0` reiškia, kad įvyko klaida, o `1` reiškia bet kokią kitą būseną.

## Sistemos būsena

Iki šiol aptartos komandos buvo skirtos atskirų paslaugų valdymui. Tačiau šios komandos nesuteikia informacijos apie dabartinę sistemos būklę. Yra įvairių „systemctl“ komandų, kurios gali pateikti būtent tokią informaciją.

`list-units` yra naudinga norint susidaryti bendrą vaizdą apie dabartinius procesus Linux sistemoje:

```bash
$ systemctl list-units
```

Vykdydami šią komandą, „systemctl“ parodys „systemd“ valdomų vienetų sąrašą. Šio sąrašo išvestyje pateikiamos įvairios skiltys su konkrečia informacija apie kiekvieną vienetą. Rodomos šios skiltys:

- **UNIT**: Vieneto pavadinimas (dažniausiai imamas iš vieneto failo pavadinimo, pvz., *„sshd.service“* – SSH demonui)
- **LOAD**: Nurodo, ar vieneto failas buvo sėkmingai įkeltas; galimos reikšmės yra `loaded`, `not-found` arba `error`.
- **ACTIVE**: Vieneto veiklos būsena, kuri gali kisti tarp tokių režimų kaip `active`, `inactive`, `activating` arba `deactivating`
- **SUB**: Pavaldus veiklos statusas, suteikiantis daugiau informacijos apie vieneto būseną (pavyzdžiui, `active` vienetas gali turėti SUB statusą `running`, `exited` arba `failed`).
- **APRAŠYMAS**: Trumpas vieneto aprašymas, dažnai atspindintis vieneto paskirtį ar funkcionalumą

Tačiau pagal numatytuosius nustatymus ši komanda **rodo tik aktyvius vienetus**. Dėl to išvesties stulpelyje „LOAD“ paprastai rodomas `loaded`, o stulpelyje „ACTIVE“ – `active`. Naudojant papildomus žymeklius, „systemctl“ galima sukonfigūruoti taip, kad ji taip pat rodytų papildomą informaciją. Pavyzdžiui, naudojant žymeklį `--all` bus rodomi visi „systemd“ įkelti vienetai, nepriklausomai nuo jų dabartinio aktyvumo būsenos.

```bash
$ systemctl list-units --all
```

Rezultatą galima dar labiau patikslinti naudojant papildomus žymeklius, pavyzdžiui, `--state=`, kad būtų filtruojami konkretūs būsenos elementai iš kategorijų „LOAD“, „ACTIVE“ arba „SUB“. Svarbu palikti žymeklį `--all`, kad būtų rodomi ir neaktyvūs elementai:

```bash
$ systemctl list-units --all --state=inactive
```

Taip pat galite naudoti filtrą `--type=`, kad būtų rodomi tam tikrų tipų vienetai, pvz., jei norite matyti tik aktyvius tarnybos vienetus:

```bash
$ systemctl list-units --type=service
```

### Išvardyti visus vienetų failus

Norėdami peržiūrėti visų vienetų failų sąrašą Linux sistemoje naudojant „systemctl“ (įskaitant tuos, kurių „systemd“ nebandė įkelti), galite naudoti `list-unit-files`“. Ši komanda rodo visus vienetų failus, kuriuos „systemd“ atpažįsta, įskaitant paslaugas, lizdus, tikslus ir kt.

```bash
$ systemctl list-units-files
```

Ši komanda rodo įvairias vienetų failų būsenas. Šios būsenos nurodo, kaip atitinkami vienetai yra sukonfigūruoti, ypač atsižvelgiant į jų veikimą paleidžiant sistemą. Dažniausios būsenos yra

- **Įjungta**: Įrenginys sukonfigūruotas taip, kad būtų automatiškai įjungiamas paleidus sistemą.
- **Išjungta**: įrenginys nėra sukonfigūruotas automatiškai paleisti paleidimo proceso metu.
- **Užmaskuota**: įrenginys yra visiškai išjungtas, todėl jo negalima paleisti nei rankiniu būdu, nei automatiškai.
- **Statinis**: įrenginys nepaleidžiamas savarankiškai, bet paprastai priklauso nuo kito įrenginio ir paleidžiamas tik šiame kontekste.

## Padalinio valdymas

Viena iš pagrindinių „systemctl“ funkcijų yra vienetų valdymas. „systemctl“ siūlo įvairias naudingas komandas ir parinktis, kurios palengvina konkrečios informacijos apie atskirus vienetus gavimą ir jų valdymą.

### Rodyti vieneto failą

Jei norite, kad konkretaus vieneto failo turinys būtų rodomas tiesiogiai konsolėje, galite naudoti komandą `cat`. Pavyzdžiui, norėdami peržiūrėti tokios paslaugos kaip *„ssh.service“* vieneto failą, įveskite:

```bash
$ systemctl cat ssh.service
```

### Rodyti priklausomybes

Jei nurodysite `list-dependencies`, konkretaus modulio priklausomybės bus rodomos medžio struktūra. Komanda atrodo taip:

```bash
$ systemctl list-dependencies sshd.service
```

Paprastai rodomos `.target` vieneto priklausomybės, atspindinčios skirtingas sistemos būsenas. Norėdami gauti išsamų, rekursyvų visų priklausomybių sąrašą, naudokite žymę `--all`.

Norėdami peržiūrėti atvirkštines priklausomybes (t. y. vienetus, kurie priklauso nuo nurodyto vieneto), komandai pridėkite `--reverse`. Žymės `--before` ir `—after` taip pat leidžia peržiūrėti priklausomybes, kurios prasideda prieš arba po minėto vieneto.

### Vienetų paslėpimas ir atskleidimas

Vieneto užmaskavimas iš esmės jį išjungia, todėl jo neįmanoma paleisti nei rankiniu būdu, nei automatiškai. Tai dažnai naudojama siekiant užtikrinti, kad paslauga ar vienetas nebūtų paleisti atsitiktinai arba automatiškai dėl priklausomybių. Užmaskavimas atliekamas sukuriant atitinkamo vieneto failo simbolinę nuorodą į `/dev/null` naudojant komandą `mask` “:

```bash
$ sudo systemctl mask nginx.service
```

Tai užtikrina, kad Nginx paslauga negalėtų būti paleista nei rankiniu būdu, nei automatiškai, kol ji veikia užmaskuotame režime.

Atšaukus užblokavimą, vienetui panaikinamas užblokuoto statuso statusas, todėl jį galima vėl paleisti įprastu būdu. Komanda užblokavimui atšaukti yra `unmask`:

```bash
$ sudo systemctl unmask nginx.service
```

## Vienetų failų redagavimas

„systemctl“ turi parinktis, leidžiančias pritaikyti ir keisti vienetų failus. Šios funkcijos buvo įdiegtos „systemd“ 218 versijoje. Jei naudojate komandą `edit`, pasirinktame vienete esantis vieneto failas automatiškai atidaromas redaguoti:

```bash
$ sudo systemctl edit nginx.service
```

Redaguojant sukuriama tuščia byla, skirta pridėti arba pakeisti konkrečius nurodymus vieneto apibrėžime. Kiekvienam vienetui (pvz., `nginx.service`) kataloge */etc/systemd/system* sukuriama pakatalogė, kurios pavadinime prie failo vardo pridedamas *priesaga .d*. Pateiktame pavyzdyje pakatalogė būtų *nginx.service.d*.

Šiame pakatalogyje sukuriama failas *„override.conf* “. Kai „systemd“ įkelia vienetą, jis sujungia šio fragmentų failo turinį su originalaus vieneto failu. Šiuo atveju pirmenybė teikiama fragmentų failo nurodymams. Norint apdoroti visą vieneto failą, galima naudoti žymę `--full` “:

```bash
$ sudo systemctl edit --full nginx.service
```

Paspausus `--full`, esamas vieneto failas atidaromas redaktoriuje, kad būtų galima jį redaguoti. Išeinant iš redaktoriaus, sistema išsaugo redaguotą failą kataloge */etc/systemd/system*.

Norėdami atšaukti savo atliktus pakeitimus, galite ištrinti įrenginio konfigūracijos katalogą `.d` arba pakeistą failą, esantį `/etc/systemd/system`:

```bash
$ sudo rm -r /etc/systemd/system/nginx.service.d
```

Visiškai peržiūrėtą vieneto failą galima ištrinti šia komanda:

```bash
$ sudo rm /etc/systemd/system/nginx.service
```

Pašalinus failą ar katalogą, reikės perkrauti „systemd“, kad jis nebesiremtų į ištrintus failus, o naudotų pačios sistemos kopiją:

```bash
$ sudo systemctl daemon-reload
```

## Sistemos būsenos (veikimo lygio) nustatymas naudojant tikslus

„systemd“ pirmiausia naudoja „target“ funkciją, kad sugrupuotų skirtingus vienetus. Tai daroma siekiant pasiekti konkretų sistemos būseną, panašiai kaip ir kitų inicijavimo sistemų veikimo lygiai. Failai su priesaga `.target` veikia kaip orientaciniai taškai, nurodantys tam tikrų funkcijų prieinamumo būseną. Tai leidžia vartotojams nurodyti pageidaujamą bendrą būseną, o ne atskirus reikalingus vienetus.

Praktinis pavyzdys yra `swap.target`, kuri žymi pasirengimą keitimuisi. Į keitimosi procesą įtraukti įrenginiai gali suderinti savo veiklą su šiuo tikslu naudodami tokias konfigūracijos parinktis kaip `WantedBy=` ar `RequiredBy=`. Kita vertus, įrenginiai, kurie priklauso nuo keitimosi, gali tai nurodyti naudodami tokius nustatymus kaip `Wants=`, `Requires=` ir `After=`, kad išreikštų savo priklausomybę ir paleidimo tvarką keitimosi atžvilgiu.

### Nustatyti numatytąjį paskirties adresą

Nustatydami ir parinkdami numatytąjį tikslą, galite nustatyti numatytąją sistemos būseną paleidimo metu. Štai kaip rasti numatytąjį tikslą savo sistemai:

```bash
$ systemctl get-default
Output
multi-user.target
```

Jei norite pakeisti numatytąjį tikslą, naudokite komandą `set-default` kartu su tikslo pavadinimu. Norėdami nustatyti numatytąjį tikslą `graphical.target`, kuris paleidžia grafinę vartotojo sąsają, naudokite šią komandą:

```bash
$ sudo systemctl set-default graphical.target
```

### Rodyti galimus kelionės tikslus

Norėdami peržiūrėti visus jūsų sistemoje esančius paskirties taškus, galite naudoti šią komandą:

```bash
$ systemctl list-unit-files --type=target
```

Čia rodomas visų jūsų sistemoje įdiegtų tikslinės vieneto failų sąrašas. Prie kiekvieno tikslo nurodytas kelias ir dabartinė būsena (pvz., aktyvuotas arba deaktyvuotas).

### Išskirti tikslus

Naudodami `isolate`, galite vienu metu aktyvuoti visus vienetus, susijusius su konkrečiu taikiniu, ir sustabdyti visus kitus vienetus, nesusijusius su juo.

Tarkime, kad dirbate aplinkoje, kurioje veikia `graphical.target`, ir norite pereiti į grynąjį daugiavartotojų režimą be grafinės vartotojo sąsajos. Tokiu atveju galite išjungti grafinę sistemą, izoliuodami `multi-user.target`. Kadangi `graphical.target` priklauso nuo `multi-user.target`, bet ne atvirkščiai, perjungiant visos grafinės paslaugos yra sustabdomos.

Tačiau prieš izoliuodami tikslą, turėtumėte patikrinti susijusias priklausomybes. Tai padės išvengti netyčinio svarbių procesų sustabdymo.

```bash
$ systemctl list-dependencies multi-user.target
```

Jei pažymėjote aktyvius vienetus, kuriuos norite išsaugoti, ir su jais sutinkate, galite nurodyti norimą paskirties vietą:

```bash
$ sudo systemctl isolate multi-user.target
```

### Sparčiosios nuorodos į svarbius įvykius

Yra nustatyti konkretūs komandų tikslai, skirti pagrindinėms operacijoms, pavyzdžiui, sistemos išjungimui ar paleidimui iš naujo. Tačiau „Linux“ sistemoje „systemctl“ taip pat siūlo praktiškus sparčiuosius klavišus, kurie suteikia papildomų funkcijų. Pavyzdžiui, norėdami perkelti sistemą į gelbėjimo režimą (vieno vartotojo režimą), galite tiesiog naudoti `rescue` vietoj `isolate rescue.target`:

```bash
$ sudo systemctl rescue
```

Sistemą galite sustabdyti, surinkę `stop`:

```bash
$ sudo systemctl stop
```

Galite pradėti visišką išjungimą, paspaudę `poweroff`:

```bash
$ sudo systemctl poweroff
```

Kita vertus, perkrovimą galima inicijuoti įvedus `reboot`:

```bash
$ sudo systemctl reboot
```

Jei esate prisijungę, šios komandos informuos jus apie artėjančius įvykius. Vien tik įvykdžius ar izoliavus tikslą, šios informacijos negausite. Svarbu žinoti, kad daugelis kompiuterių, siekdami užtikrinti teisingą komandų vykdymą, šias trumpesnes komandas susieja su „systemd“.

Paprastai sistemos perkrovimui pakanka šios komandos:

```bash
$ sudo reboot
```


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/systemctl/](https://www.ionos.com/lt-lt/digitalguide/serveris/konfiguracija/systemctl/) for AI/LLM consumption.