# Kuidas kasutada systemctl-i teenuste ja üksuste haldamiseks

Linuxis mängib systemctl keskset rolli alglaadimissüsteemi ja teenustehalduri systemd haldamisel. Systemctl abil saavad kasutajad hallata systemd teenuseid, nende üksusi ja seadistusi, mis teeb sellest süsteemihalduse jaoks asendamatu tööriista. Alates käivitamise juhtimisest kuni süsteemi seisundite kohandamiseni pakub systemctl laia funktsioonide valikut.

## Mis on systemctl?

systemctl on käsurea tööriist, mille abil hallata **systemd-d** – Linuxi operatsioonisüsteemide alglaadimissüsteemi ja süsteemihaldurit. systemd on praegu standardne alglaadimissüsteem mitmetes Linuxi distributsioonides ja Linuxi serveridistributsioonides, nagu Ubuntu, Debian, Fedora, Red Hat Enterprise Linux (RHEL), CentOS, Arch Linux, Mageia ja Gentoo. Siiski ei ole see kõigis distributsioonides ühtlaselt kasutusele võetud.

Systemd-ökosüsteemis täidab systemctl **keskset rolli süsteemiteenuste haldamisel, konfigureerimisel, käivitamisel ja süsteemi hooldamisel**. Selle tööriista funktsionaalsus ulatub kaugemale teenuste lihtsast käivitamisest ja peatamisest. See võimaldab Linuxi süsteemi peaaegu kõigi aspektide põhjalikku haldamist.

Järgnevas juhendis leiad praktilisi koodinäiteid ja [Linuxi käske](https://www.ionos.com/et-ee/digitalguide/server/seadistused/linuxi-kaesud-uelevaade-terminali-kaesudest/) systemctl kasutamiseks. Allpool toodud näited põhinevad **Ubuntu 22.04**-l.

## Teenuste haldus

Init-süsteemi peamine eesmärk on käivitada komponendid, mida on vaja pärast Linuxi tuuma käivitamist (kasutajakeskkonda kuuluvad komponendid). Init-süsteemi kasutatakse ka teenuste ja taustprotsesside tõhusaks juhtimiseks serveris süsteemi töötamise mis tahes etapis.

Systemd-s keskenduvad enamik protsesse süsteemi poolt hallatavatele ressurssidele. Neid nimetatakse **üksusteks**. Need üksused liigitatakse vastavalt ressursi tüübile, mida nad esindavad, ning need on määratletud üksusfailides. Üksuse tüübi saab ära tunda faililaiendi järgi.

Teenuste haldamisel on olulised teenuseüksused, mille nimi lõpeb laiendiga *.service.* Teenuste haldamise käskude puhul ei ole aga alati vaja seda laiendit kasutada. systemd suudab ära tunda, et sellised käsud viitavad üldjuhul teenustele.

### Teenuste käivitamine ja peatamine

Üks levinumaid ülesandeid, mida Linuxis systemctl abil täidetakse, on teenuste käivitamine ja peatamine. Need funktsioonid on süsteemiadministreerimise aluseks ning võimaldavad teil kontrollida süsteemis töötavaid protsesse. Teenuse käivitamiseks kasutage käsku `start`. Kui töötate kasutajana, kellel puuduvad root-õigused, peate kasutama `sudo`.

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

Kuna systemd on loodud teenuste haldamise käskude jaoks automaatselt *.service-faile* otsima, võib käsu sisestada ka lihtsustatud kujul:

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

Näiteks Apache veebiserveri käivitamiseks sisestaksite järgmise käsu:

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

Kui soovid käimasolevat teenust peatada, kasuta käsku `stop`:

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

### Taaskäivita ja lae uuesti

Teenuse taaskäivitamiseks, mis on sageli vajalik pärast konfiguratsiooni muutmist, kasuta käsku `restart`:

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

Kui rakendus suudab oma **konfiguratsioonifaile** uuesti laadida **ilma taaskäivitamiseta**, saab protsessi käivitamiseks kasutada käsku `reload`:

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

Kui te ei ole kindel, kas teenus toetab konfiguratsiooni uuesti laadimist, võite kasutada käsku `reload-or-restart`. See laadib konfiguratsiooni uuesti, kui see võimalus on toetatud. Kui seda võimalust ei toetata, taaskäivitab käsk teenuse, et algatada konfiguratsiooni uuendamine.

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

### Teenuste aktiveerimine ja deaktiveerimine

Teenuste aktiveerimise ja deaktiveerimise abil saate määrata, kas teenus peaks süsteemi käivitamisel automaatselt käivituma. See on eriti oluline süsteemi jõudluse, turvalisuse ja erinevate teenuste vaheliste sõltuvuste haldamise seisukohalt. Kasutage käsku `enable`, et seadistada automaatne käivitamine süsteemi käivitamisel:

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

Selle protsessi käigus luuakse sümboliline link. See link ühendab süsteemiteenuse faili koopia. Süsteemiteenuse fail asub tavaliselt kataloogis */lib/systemd/system* või */etc/systemd/system*. Sealt leiad ka kõvakettal asuva kataloogi, kust systemd otsib automaatse käivitamise faile. See asub tavaliselt kataloogis */etc/systemd/system/some\_target.target.wants*.

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

Et teenus ei käivituks süsteemi käivitamisel automaatselt, kasuta `disable`:

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

Seejärel kustutatakse sümboliline link, mis määrab automaatse käivitamise süsteemi käivitamisel.

**Tähelepanek**: teenuse lihtsalt aktiveerimine ei käivita seda kohe käimasolevas sessioonis. Et teenus kohe käivitada ja seadistada nii, et see käivituks automaatselt süsteemi käivitamisel, tuleb **täita nii** käsk `start` kui **ka** käsk `enable`.

### Vaata teenuste staatust

systemctl võimaldab kuvada teavet teenuste seisundi kohta. See on eriti kasulik süsteemi- ja rakendusteenuste hetkeolukorra jälgimiseks ja diagnoosimiseks. Kasutage kontrollimiseks käsku `status`:

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

See käsk annab mitmesugust teavet, sealhulgas teenuse praeguse seisundi (aktiivne, mitteaktiivne, rikkis jne), viimati käivitatud protsesside ja logisõnumite, cgroupi hierarhia ning esimeste logiridade kohta.

Linuxis teenuse hetkeaktiivsuse kontrollimiseks kasutatakse systemctl-i abil `is-active`. See käsk näitab, kas teenus on hetkel aktiivne või mitte:

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

Kui teenus on aktiivne, määratakse selle hetkeolekuks tavaliselt väärtus `active`, kui teenus on mitteaktiivne, siis väärtus `inactive`.

Selleks et kontrollida, kas teenus on seadistatud süsteemi käivitamisel automaatselt sisse lülituma, võid kasutada käsku `is-enabled`. See on eriti kasulik teenuste käivitamisseadete haldamiseks Linuxi süsteemis.

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

Käsk näitab, kas teenus on aktiveeritud või deaktiveeritud, ning määrab vastavalt vastusele väljumiskoodiks „0“ või „1“.

Samuti saate käsuga `is-failed` kontrollida, kas mõnel konkreetsel **teenusel on veatunnus**:

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

Kui käsk täidetakse edukalt, väljastatakse `active`. Vea korral on koodiks `failed`. Kui seade peatati tahtlikult, võib vastuseks olla `unknown` või `inactive`. Lõpetamiskood `0` tähistab vea tekkimist, `1` aga muud seisundit.

## Süsteemi seisund

Seni tutvustatud käsud on keskendunud üksikute teenuste haldamisele. Need käsud ei anna aga ülevaadet süsteemi hetkeolukorrast. On olemas mitmesuguseid systemctl-käskusid, mis suudavad just sellist teavet pakkuda.

`list-units` on kasulik, et saada ülevaade Linuxis hetkel käivitatud protsessidest:

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

Kui käsk systemctl käivitatakse, kuvab see systemd poolt hallatavate üksuste nimekirja. Selle nimekirja väljund sisaldab mitmeid veerge, milles on esitatud iga üksuse kohta konkreetset teavet. Kuvatakse järgmised veerud:

- **UNIT**: Üksuse nimi (see võetakse sageli üksuse failinimest, nt *sshd.service* SSH-daemoni puhul)
- **LOAD**: Näitab, kas üksuse fail laaditi edukalt; võimalikud väärtused on `loaded`, `not-found` või `error`.
- **ACTIVE**: Üksuse aktiivsuse staatus, mis võib vahelduda režiimide vahel, nagu `active`, `inactive`, `activating` või `deactivating`
- **SUB**: Alluv tegevusstaatus, mis annab täiendavat teavet üksuse seisundi kohta (näiteks üksusel `active` võib SUB-staatuseks olla `running`, `exited` või `failed`).
- **DESCRIPTION**: Üksuse lühikirjeldus, mis peegeldab sageli üksuse otstarvet või funktsionaalsust

Kuid käsu vaikimisi seadistus **näitab ainult aktiivseid üksusi**. Seetõttu on väljundi veerus „LOAD“ tavaliselt näha `loaded` ja veerus „ACTIVE“ `active`. Lisamärkide abil saab systemctl-i seadistada nii, et see kuvaks ka täiendavat teavet. Näiteks märgi `--all` kasutamisel kuvatakse kõik systemd poolt laaditud üksused, sõltumata nende praegusest aktiivsuse seisundist.

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

Väljundit saab veelgi täpsustada, kasutades lisamärke, näiteks `--state=`, et filtreerida LOAD-, ACTIVE- või SUB-kategooriate konkreetseid seisundeid. Oluline on jätta märk `--all` alles, et kuvataks ka mitteaktiivsed seadmed:

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

Võite kasutada ka filtrit `--type=`, et kuvada teatud tüüpi üksusi, näiteks kui soovite näha ainult aktiivses teenistuses olevaid üksusi:

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

### Näita kõiki üksusfaile

Kui soovid Linuxis systemctl-i abil kuvada kõigi üksusfailide nimekirja (sh need, mida systemd pole veel laadida proovinud), võid kasutada `list-unit-files`. See käsk kuvab kõik üksusfailid, millest systemd on teadlik, sealhulgas teenused, pistikupesad, sihtmärgid ja muud.

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

Käsk kuvab üksuste failide erinevad seisundid. Need seisundid näitavad, kuidas vastavad üksused on konfigureeritud, eelkõige seoses nende käitumisega süsteemi käivitamisel. Kõige levinumad seisundid on

- **Lubatud**: Seade on seadistatud nii, et see käivitub automaatselt süsteemi käivitamisel.
- **Väljalülitatud**: Seade ei ole konfigureeritud automaatselt käivituma süsteemi käivitamisel.
- **Maskitud**: Seade on täielikult deaktiveeritud, nii et seda ei saa käivitada ei käsitsi ega automaatselt.
- **Staatiline**: Seade ei käivitu iseseisvalt, vaid sõltub tavaliselt teisest seadmest ja käivitatakse ainult selles kontekstis.

## Üksuse juhtimine

Üks systemctl-i peamisi ülesandeid on üksuste haldamine. systemctl pakub mitmeid kasulikke käske ja valikuid, mis hõlbustavad konkreetsete üksuste kohta teabe hankimist ja nende haldamist.

### Näita üksuse faili

Kui soovid, et konkreetse teenusefaili sisu kuvataks otse konsoolis, võid kasutada käsku `cat`. Näiteks teenuse *ssh.service* teenusefaili vaatamiseks sisesta:

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

### Näita sõltuvusi

Kui kasutad `list-dependencies`, kuvatakse konkreetse mooduli sõltuvused puustruktuuris. Käsk näeb välja järgmine:

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

Tavaliselt kuvatakse sõltuvused `.target` üksuse puhul, mis esindavad erinevaid süsteemi seisundeid. Kasutage lipikut `--all`, et saada täielik ja rekursiivne loetelu kõigist sõltuvustest.

Pöördsõltuvuste (st nimetatud ühikust sõltuvate ühikute) kuvamiseks lisage käskule `--reverse`. Lipud `--before` ja `—after` võimaldavad teil näha ka sõltuvusi, mis algavad enne või pärast kõnealust ühikut.

### Üksuste varjamine ja varjamise tühistamine

Üksuse maskeerimine lülitab selle tegelikult välja, nii et seda ei saa käivitada ei käsitsi ega automaatselt. Seda kasutatakse sageli selleks, et teenus või üksus ei käivituks kogemata või sõltuvuste tõttu automaatselt. Maskeerimine toimub nii, et luuakse asjaomase üksuse faili sümboliline link failile `/dev/null` käsuga `mask`:

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

See tagab, et Nginx-teenust ei saa maskeeritud režiimis olles käivitada ei käsitsi ega automaatselt.

Maskimise tühistamine eemaldab üksuselt maskeeritud staatuse, nii et seda saab uuesti tavapäraselt käivitada. Maskimise tühistamise käsk on `unmask`:

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

## Üksusfailide redigeerimine

systemctl-il on võimalused üksusfailide kohandamiseks ja muutmiseks. Need funktsioonid lisati systemd versioonis 218. Kui kasutad käsku `edit`, avatakse valitud üksuse üksusfail automaatselt redigeerimiseks:

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

Redigeerimisel luuakse tühi fail, et lisada või muuta üksuse määratlusesse konkreetseid juhiseid. Iga üksuse (nt `nginx.service`) jaoks luuakse kataloogis */etc/systemd/system* alamkataloog, mille failinimele lisatakse *laiend .d*. Eespool toodud näite puhul oleks alamkataloogiks *nginx.service.d*.

Sellesse alamkausta luuakse fail *override.conf*. Kui systemd laadib ühiku, ühendab ta selle katkendfaili sisu algse ühikufailiga. Sel juhul on katkendis sisalduvatel juhistel eelisõigus. Kogu ühikufaili töötlemiseks võib kasutada lipikut `--full`:

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

`--full` vajutamisel avatakse olemasolev seadmefail redaktoris, et seda muuta. Redaktorist väljumisel salvestab süsteem muudetud faili kataloogi */etc/systemd/system*.

Et tühistada enda tehtud muudatused, võid kas kustutada seadme konfiguratsioonikataloogi `.d` või muudetud faili kataloogis `/etc/systemd/system`:

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

Täielikult muudetud üksusfaili saab kustutada järgmise käsuga:

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

Pärast faili või kataloogi eemaldamist tuleb süsteemil systemd uuesti käivitada, et see lõpetaks viitamise kustutatud failidele ja kasutaks selle asemel süsteemi enda koopiat:

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

## Süsteemi oleku (käivitusrežiimi) kohandamine sihtmärkide abil

systemd kasutab peamiselt sihtmärke (target), et rühmitada erinevaid üksusi. Seda tehakse selleks, et saavutada konkreetne süsteemi seisund, sarnaselt teiste alglaadimissüsteemide käivitusastmetega. Lõpuga `.target` failid toimivad orientatsioonipunktidena, mis näitavad teatud funktsioonide kättesaadavuse seisundit. See võimaldab kasutajatel määrata soovitud üldise seisundi, mitte üksikuid vajalikke üksusi.

Praktiline näide on `swap.target`, mis tähistab vahetusvalmiduse seisundit. Vahetusprotsessis osalevad üksused saavad end selle sihtmärgiga kooskõlastada, kasutades selliseid konfiguratsioonivõimalusi nagu `WantedBy=` või `RequiredBy=`. Seevastu vahetusest sõltuvad üksused saavad seda näidata selliste seadete abil nagu `Wants=`, `Requires=` ja `After=`, et väljendada oma sõltuvust ja käivitamisjärjekorda seoses vahetusega.

### Vaikimisi sihtkoha kuvamine ja seadistamine

Vaikimisi sihtmärgi kuvamine ja seadistamine võimaldab teil määrata süsteemi käivitamisel selle vaikimisi oleku. Nii leiate oma süsteemi vaikimisi sihtmärgi:

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

Kui soovid vaikimisi sihtkohta muuta, kasuta käsku `set-default` koos sihtkoha nimega. Kasuta järgmist käsku, et määrata vaikimisi sihtkohaks `graphical.target`, mis käivitab graafilise kasutajaliidese:

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

### Saadaval olevate sihtkohtade loetelu

Süsteemis kättesaadavate sihtkohtade loetelu kuvamiseks võite kasutada järgmist käsku:

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

See kuvab nimekirja kõigist teie süsteemi installitud sihtüksuste failidest. Iga sihtüksuse kohta kuvatakse asukoht ja praegune staatus (nt aktiveeritud või deaktiveeritud).

### Eraldada sihtmärgid

`isolate` abil saad korraga aktiveerida kõik üksused, mis on seotud konkreetse sihtmärgiga, ning peatada kõik ülejäänud üksused, mis sellega seotud ei ole.

Oletame, et töötate keskkonnas, kus on aktiivne `graphical.target`, ja soovite minna üle puhtale mitme kasutaja režiimile ilma graafilise kasutajaliideseta. Sel juhul saate graafilise süsteemi deaktiveerida, eraldades `multi-user.target`. Kuna `graphical.target` sõltub `multi-user.target`, kuid mitte vastupidi, peatatakse üleminekul kõik graafilised teenused.

Siiski peaksite enne sihtmärgi isoleerimist kontrollima sellega seotud sõltuvusi. See aitab vältida oluliste protsesside tahtmatut peatamist.

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

Kui oled märkinud aktiivsed üksused, mida soovid säilitada, ja oled nendega nõus, saad valida soovitud sihtkoha:

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

### Oluliste sündmuste otseteed

Oluliste toimingute jaoks, nagu süsteemi sulgemine või taaskäivitamine, on olemas kindlad käsud. Linuxis pakub systemctl aga ka praktilisi lühikäske, mis võimaldavad täiendavaid funktsioone. Näiteks süsteemi päästerežiimi (ühe kasutaja režiimi) lülitamiseks piisab, kui kasutada `isolate rescue.target` asemel `rescue`:

```bash
$ sudo systemctl rescue
```

Saate süsteemi peatada numbriga `stop`:

```bash
$ sudo systemctl stop
```

Saate käivitada täieliku väljalülitamise numbriga `poweroff`:

```bash
$ sudo systemctl poweroff
```

Teisalt saate taaskäivituse käivitada numbriga `reboot`:

```bash
$ sudo systemctl reboot
```

Kui olete sisse logitud, annavad need käsud teile teavet eelseisvate sündmuste kohta. Lihtsalt käsu täitmine või sihtmärgi eraldamine ei anna teile seda teavet. Oluline on teada, et paljud arvutid seovad nende toimingute lühemad käsud süsteemiga systemd, et tagada nende õige täitmine.

Süsteemi taaskäivitamiseks piisab tavaliselt järgmisest käsust:

```bash
$ sudo reboot
```


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/server/seadistused/systemctl/](https://www.ionos.com/et-ee/digitalguide/server/seadistused/systemctl/) for AI/LLM consumption.