6. modulis · 6.1
Pakalpojumu pārvaldība ar systemd
6. modulis: Pakalpojumi un žurnāli · Lasīšanas laiks: 10 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet palaist, apturēt un pārlādēt pakalpojumus, iestatīt to palaišanu sistēmas startēšanas laikā, nolasīt pakalpojuma statusu un droši mainīt pakalpojuma iestatījumu ar drop-in failu.
Pamatjēdzieni: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=
Kas uztur visu darbībā?
Serverī darbojas desmitiem programmu, kurām vienmēr jābūt pieejamām: SSH serveris, tīmekļa serveris, datubāze, laika sinhronizācija. Šādas programmas sauc par pakalpojumiem (services jeb daemons). Kādam tās jāpalaiž sistēmas startēšanas laikā, jāuzrauga un jārestartē, ja tās avarē. Debian, Ubuntu, AlmaLinux un Rocky Linux sistēmās to dara systemd. Tā ir pirmā programma, ko palaiž kodols (process 1), un pēc tam tā palaiž visu pārējo.
systemd strādā ar unit vienībām: aprakstiem par to, kas tai jāpārvalda. Svarīgākie veidi:
| Veids | Paplašinājums | Piemērs |
|---|---|---|
| Pakalpojums | .service | nginx.service, ssh.service |
| Taimeris (ieplānots uzdevums) | .timer | apt-daily.timer (nodarbība 4.2, nodarbība 6.3) |
| Sokets | .socket | ssh.socket Ubuntu 24.04 un jaunākās versijās |
| Mērķis (unit vienību grupa) | .target | multi-user.target |
Ar systemd Jūs sazināties, izmantojot komandu systemctl. Paplašinājumu .service drīkst izlaist: systemctl status nginx ir tas pats, kas systemctl status nginx.service.
Statusa nolasīšana
Komanda, ko izmantosiet visbiežāk:
anna@web1:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-11-09 08:12:44 CET; 3h 2min ago
Docs: man:nginx(8)
Process: 902 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 905 (nginx)
Tasks: 3 (limit: 2275)
Memory: 4.1M (peak: 6.3M)
CPU: 213ms
CGroup: /system.slice/nginx.service
├─905 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
└─906 "nginx: worker process"
nov 09 08:12:44 web1 systemd[1]: Starting nginx.service - A high performance web server...
nov 09 08:12:44 web1 systemd[1]: Started nginx.service - A high performance web server...Lasiet to no augšas uz leju:
- Aplītis pirms nosaukuma ir zaļš, ja pakalpojums darbojas, balts, ja tas ir apturēts, un sarkans, ja tas ir neizdevies.
- Loaded norāda, kur atrodas unit fails un vai pakalpojums tiek palaists sistēmas startēšanas laikā (
enabled) vai ne (disabled). - Active norāda, vai tas pašlaik darbojas (
active (running)), ir apturēts (inactive (dead)) vai ir neizdevies (failed), un kopš kura laika. - Main PID un CGroup parāda, kuri procesi pieder pakalpojumam.
- Apakšā redzamas pēdējās rindas no pakalpojuma žurnāla. Bieži tur jau ir rakstīts, kāpēc kaut kas nedarbojas; vairāk Jūs varat izlasīt ar
journalctl(nodarbība 6.2).
Palaišana, apturēšana, restartēšana un pārlādēšana
anna@web1:~$ sudo systemctl start nginx # palaist tagad
anna@web1:~$ sudo systemctl stop nginx # apturēt tagad
anna@web1:~$ sudo systemctl restart nginx # apturēt un palaist no jauna
anna@web1:~$ sudo systemctl reload nginx # pārlasīt konfigurāciju bez apturēšanasAtšķirība starp restart un reload praksē ir svarīga. Restartējot pakalpojums uz brīdi apstājas: esošie savienojumi tiek pārtraukti, un, ja jaunajā konfigurācijā ir kļūda, tas vairs nepalaižas un Jūsu vietne nav pieejama. Pārlādējot pakalpojums nolasa savu konfigurāciju no jauna, turpinot darboties; ja konfigurācijā ir kļūda, nginx saglabā veco. Tāpēc pēc konfigurācijas izmaiņām nginx, Caddy, SSH un fail2ban gadījumā izmantojiet reload un vispirms pārbaudiet konfigurāciju (nginx -t, sshd -t, fail2ban-client -t). Ne katrs pakalpojums atbalsta reload; systemctl reload-or-restart izvēlas pats.
Sistēmas startēšanas laikā: enable un disable
Palaišana un "palaišana sistēmas startēšanas laikā" ir divas dažādas lietas:
anna@web1:~$ sudo systemctl enable nginx # turpmāk palaist sistēmas startēšanas laikā
anna@web1:~$ sudo systemctl disable nginx # vairs nepalaist sistēmas startēšanas laikā
anna@web1:~$ sudo systemctl enable --now nginx # abi: palaist tagad un arī sistēmas startēšanas laikā
anna@web1:~$ systemctl is-enabled nginx
enabledKlasiska kļūda: Jūs palaižat pakalpojumu ar start, viss darbojas, bet pēc nākamās restartēšanas (piemēram, kodola atjauninājuma dēļ, nodarbība 4.2) tā vairs nav. Tāpēc jaunam pakalpojumam izmantojiet enable --now.
Ja vēlaties būt pārliecināti, ka pakalpojums nekad netiek palaists, arī tad, ja to pieprasa cits pakalpojums, ir mask: sudo systemctl mask <dienst>. Atcelt to var ar unmask.
Kas nav kārtībā?
Viena komanda parāda visas neizdevušās unit vienības:
anna@web1:~$ systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION
● php8.4-fpm.service loaded failed failed The PHP 8.4 FastCGI Process Manager
1 loaded units listed.Padariet to par ieradumu, piemēram, pēc katras restartēšanas un katras jaunināšanas (nodarbība 4.3): sarakstam jābūt tukšam. Pēc problēmas novēršanas paziņojumu noņemiet ar sudo systemctl reset-failed.
Visu darbojošos pakalpojumu pārskats:
anna@web1:~$ systemctl list-units --type=service --state=runningJa darbojas kaut kas, ko Jūs nepazīstat vai neizmantojat, noskaidrojiet, kas tas ir. Katrs nevajadzīgs pakalpojums ir lieka uzbrukuma virsma (nodarbība 5.1 un 10.1).
Unit faili un drop-in faili
Unit fails ir teksta fails. Pakotnes versija atrodas /usr/lib/systemd/system/ (vecākās sistēmās /lib/systemd/system/). To Jūs nekad nemaināt: pakotnes atjauninājums to pārrakstīs. Savas izmaiņas ievietojiet drop-in failā: nelielā failā, kurā ir tikai tās rindas, kuras vēlaties mainīt. Visvieglāk to izdarīt ar:
anna@web1:~$ sudo systemctl edit nginxAtveras redaktors ar tukšu daļu starp divām komentāra rindām. Tas, ko tur ierakstīsiet, nonāks /etc/systemd/system/nginx.service.d/override.conf. Piemēram: automātiski restartēt nginx, ja tas negaidīti apstājas.
[Service]
Restart=on-failure
RestartSec=5sPēc saglabāšanas systemctl edit automātiski pārlādē systemd konfigurāciju. Ja unit failu rediģējat citā veidā, izpildiet pats:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxdaemon-reload liek systemd no jauna nolasīt unit failus; pašam pakalpojumam pēc tam vēl jārestartējas, lai izmaiņas stātos spēkā. Pilnu rezultātu (oriģināls kopā ar drop-in failiem) varat redzēt ar systemctl cat nginx.
Restart=on-failure ir labs ieradums svarīgiem pakalpojumiem. Taču neslēpiet ar to īstu kļūdu: pakalpojuma, kas avarē un restartējas ik pēc piecām sekundēm, cēlonis jāmeklē žurnālā. Pēc dažām ātrām neveiksmēm pēc kārtas systemd pārtrauc restartēšanu (noklusējuma robeža ir pieci palaišanas mēģinājumi desmit sekunžu laikā) un iestata pakalpojumam statusu failed.
AlmaLinux un Rocky Linux sistēmās
systemd un systemctl darbojas tieši tāpat. Atšķiras tikai dažu pakalpojumu nosaukumi: SSH pakalpojums saucas sshd, distribūcijas tīmekļa serveris saucas httpd (Apache) vai nginx, bet ugunsmūris firewalld.
Praksē
Jūsu pakalpojumu sniedzēja VPS ekrānā (WebOké un citur) var visu serveri izslēgt, restartēt vai "piespiedu kārtā izslēgt". Pēdējais ir tas pats, kas izraut kontaktdakšu: pakalpojumiem nav iespējas korekti apstāties, un datubāze var tikt bojāta. Servera iekšienē izmantojiet sudo systemctl reboot vai sudo shutdown -h now, bet panelī parasto pogu izslēgšanai vai restartēšanai.
Kopsavilkums
- systemd palaiž un uzrauga visus pakalpojumus; Jūs to vadāt ar
systemctl. systemctl statusparāda, vai pakalpojums darbojas, vai tas tiek palaists sistēmas startēšanas laikā, un pēdējās žurnāla rindas.start/stop/restartattiecas uz pašreizējo brīdi,enable/disableuz sistēmas startēšanu; jaunam pakalpojumam izmantojietenable --now.- Pēc konfigurācijas izmaiņām: vispirms pārbaudiet, tad
reload;systemctl --failedjābūt tukšam. - Nekad nemainiet pakotnes unit failu, bet izmantojiet drop-in failu ar
systemctl edit.
Tests (quiz)
Uzdevums
Uzdevums O6.1: Jūsu pakalpojumu pārskats. Izveidojiet savā serverī visu darbojošos pakalpojumu sarakstu (systemctl list-units --type=service --state=running) un pārbaudiet, vai systemctl --failed ir tukšs. Katram pakalpojumam norādiet, ko tas dara un vai Jums tas ir vajadzīgs. Noskaidrojiet par vienu pakalpojumu, ko nepazināt, kas tas ir (systemctl status, man). Pēc tam vienam svarīgam pakalpojumam iestatiet Restart=on-failure drop-in failā un ar systemctl cat pārbaudiet, ka tas tur ir.
Uzdevums O6.1: Jūsu pakalpojumu pārskats
Šo uzdevumu veicat paši; neviens to nepārbauda. Atzīmējiet, ko esat izdarījuši, un atzīmējiet uzdevumu kā paveiktu.
Drop-in fails atrodas /etc/systemd/system/<naam>.service.d/override.conf, nevis /usr/lib/systemd. Ar reload pakalpojums turpina darboties, un, piemēram, nginx kļūdas gadījumā saglabā veco konfigurāciju; iepriekš pārbaudiet ar nginx -t vai sshd -t. Lieki pakalpojumi: disable --now vai pakotnes noņemšana.
Jūsu atzīmes un piezīmes paliek tikai šajā pārlūkprogrammā; mēs tās nekur nesūtām. Ja esat pieteikušies, sadaļā Mani kursi saglabājam tikai to, ka uzdevums ir paveikts.
Vairāk lasīt
- Rokasgrāmata
systemctl(1): https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - Rokasgrāmata
systemd.service(5)(Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - Rokasgrāmata
systemd.unit(5)(drop-in faili): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html
