# 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](https://www.ionos.com/lv-lv/digitalguide/serveris/konfiguracija/linux-komandas-terminala-komandu-parskats/), 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`.

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

Tā 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ā:

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

Piemēram, lai palaistu Apache tīmekļa serveri, jāievada:

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

Ja vēlaties apturēt darbojošos pakalpojumu, izmantojiet `stop`:

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

### Pā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`:

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

Ja lietojumprogramma spēj atjaunināt savus **konfigurācijas failus bez pārstartēšanas**, šo procesu var uzsākt, izmantojot komandu `reload`:

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

Ja 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.

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

### Pakalpojumu 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`:

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

Veicot š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*.

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

Lai pakalpojums nepalaižtos automātiski sistēmas sākšanas laikā, izmantojiet `disable`:

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

Pē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`

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

Šī 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ē:

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

Paš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ā.

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

Komanda 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**:

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

Ja 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.

Komanda`list-units` ir noderīga, lai iegūtu pārskatu par pašreizējiem resursiem Linux sistēmā:

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

Kad 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-found` vai `error`.
- **ACTIVE**: Vienības darbības statuss, kas var mainīties starp režīmiem, piemēram, `active`, `inactive`, `activating` vai `deactivating`
- **SUB**: Pakārtotais darbības statuss, kas sniedz sīkāku informāciju par vienības stāvokli (piemēram, vienībai `active` SUB statuss var būt `running`, `exited` vai `failed`)
- **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.

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

Rezultā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:

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

Varat 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:

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

### Uzskaitī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.

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

Šī 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:

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

### Rā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:

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

Parasti 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`:

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

Tas 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`:

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

## Vienī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:

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

Rediģē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:

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

Nospiež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`:

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

Pilnībā pārstrādātu vienības failu var dzēst, izmantojot šādu komandu:

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

Pē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:

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

## Sistē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:

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

Ja 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:

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

### Saraksts ar pieejamajiem galamērķiem

Lai parādītu visus sistēmā pieejamos galamērķus, varat izmantot šādu komandu:

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

Tiek 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.

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

Ja 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:

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

### Saī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`:

```bash
$ sudo systemctl rescue
```

Sistēmu var apturēt, nospiežot `stop`:

```bash
$ sudo systemctl stop
```

Ar `poweroff` varat uzsākt pilnīgu izslēgšanu:

```bash
$ sudo systemctl poweroff
```

No otras puses, varat uzsākt pārstartēšanu, ievadot `reboot`:

```bash
$ sudo systemctl reboot
```

Ja 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:

```bash
$ sudo reboot
```


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