Moodul 6 · 6.1
Teenuste haldamine systemd abil
Moodul 6: Teenused ja logid · Lugemisaeg: 10 minutit
Õpieesmärk: Pärast seda õppetundi oskad teenuseid käivitada, peatada, uuesti laadida ja alglaadimisel käivituma panna, teenuse olekut lugeda ning teenuse seadet drop-in-faili abil turvaliselt muuta.
Põhimõisted: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=
Kes hoiab kõike töös?
Serveris töötab kümneid programme, mis peavad alati olemas olema: SSH-server, veebiserver, andmebaas, aja sünkroonimine. Selliseid programme nimetatakse teenusteks (services ehk daemons). Keegi peab need alglaadimisel käivitama, neil silma peal hoidma ja need uuesti käivitama, kui nad kokku kukuvad. Debianis, Ubuntus, AlmaLinuxis ja Rocky Linuxis teeb seda systemd. See on esimene programm, mille kernel käivitab (protsess 1), ja seejärel käivitab see kõik muu.
systemd töötab unitite abil: need on kirjeldused millestki, mida see peab haldama. Kõige tähtsamad liigid:
| Liik | Laiend | Näide |
|---|---|---|
| Teenus | .service | nginx.service, ssh.service |
| Taimer (ajastatud ülesanne) | .timer | apt-daily.timer (õppetund 4.2, õppetund 6.3) |
| Sokkel | .socket | ssh.socket Ubuntu 24.04 ja uuemates versioonides |
| Siht (unitite rühm) | .target | multi-user.target |
systemd-iga suhtled käsuga systemctl. Laiendi .service võid ära jätta: systemctl status nginx on sama mis systemctl status nginx.service.
Oleku lugemine
Käsk, mida kasutad kõige sagedamini:
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...Loe seda ülevalt alla:
- Täpp nime ees on töötava teenuse puhul roheline, peatatud teenuse puhul valge ja ebaõnnestunud teenuse puhul punane.
- Loaded näitab, kus unit-fail asub ja kas teenus käivitub alglaadimisel (
enabled) või mitte (disabled). - Active näitab, kas teenus praegu töötab (
active (running)), on peatatud (inactive (dead)) või on ebaõnnestunud (failed), ja alates millal. - Main PID ja CGroup näitavad, millised protsessid teenusele kuuluvad.
- All on teenuse logi viimased read. Sageli on seal juba kirjas, miks midagi valesti läheb; rohkem näed käsuga
journalctl(õppetund 6.2).
Käivitamine, peatamine, taaskäivitamine ja uuesti laadimine
anna@web1:~$ sudo systemctl start nginx # käivita kohe
anna@web1:~$ sudo systemctl stop nginx # peata kohe
anna@web1:~$ sudo systemctl restart nginx # peata ja käivita uuesti
anna@web1:~$ sudo systemctl reload nginx # loe seadistus uuesti ilma peatamataVahe restarti ja reloadi vahel on praktikas oluline. Restardi ajal peatub teenus hetkeks: pooleliolevad ühendused katkevad ja kui uues seadistuses on viga, ei käivitu teenus enam ning su veebisait on maas. Reloadi korral loeb teenus oma seadistuse uuesti sisse, jäädes samal ajal tööle; seadistuse vea korral jätkab nginx vana seadistusega. Kasuta seega nginxi, Caddy, SSH ja fail2bani puhul pärast seadistuse muutmist reloadi ja testi seadistust enne (nginx -t, sshd -t, fail2ban-client -t). Kõik teenused reloadi ei toeta; systemctl reload-or-restart valib ise.
Alglaadimisel: enable ja disable
Käivitamine ja „alglaadimisel käivitamine“ on kaks eri asja:
anna@web1:~$ sudo systemctl enable nginx # käivitub edaspidi alglaadimisel
anna@web1:~$ sudo systemctl disable nginx # alglaadimisel enam ei käivitu
anna@web1:~$ sudo systemctl enable --now nginx # mõlemad: käivita kohe ja alglaadimisel
anna@web1:~$ systemctl is-enabled nginx
enabledKlassikaline viga: käivitad teenuse käsuga start, kõik töötab, ja pärast järgmist taaskäivitust (näiteks kerneliuuenduse tõttu, õppetund 4.2) on see kadunud. Seepärast kasuta uue teenuse jaoks käsku enable --now.
Kui tahad kindel olla, et teenus ei käivitu kunagi, ka siis mitte, kui mõni teine teenus seda nõuab, on olemas mask: sudo systemctl mask <dienst>. Tagasi saad selle käsuga unmask.
Mis on valesti?
Üks käsk näitab kõiki ebaõnnestunud uniteid:
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.Tee sellest harjumus, näiteks pärast iga taaskäivitust ja iga uuendust (õppetund 4.3): nimekiri peaks olema tühi. Pärast probleemi lahendamist eemaldad teate käsuga sudo systemctl reset-failed.
Ülevaade kõigist töötavatest teenustest:
anna@web1:~$ systemctl list-units --type=service --state=runningKui seal töötab midagi, mida sa ei tunne või ei kasuta, uuri välja, mis see on. Iga teenus, mida pole vaja, on tarbetu ründepind (õppetund 5.1 ja 10.1).
Unit-failid ja drop-in-failid
Unit-fail on tekstifail. Paketi versioon asub kaustas /usr/lib/systemd/system/ (vanemates süsteemides /lib/systemd/system/). Seda ära kunagi muuda: paketi uuendus kirjutab selle üle. Oma muudatused paned drop-in-faili: väikesesse faili, mis sisaldab ainult neid ridu, mida tahad muuta. Kõige lihtsam on seda teha nii:
anna@web1:~$ sudo systemctl edit nginxAvaneb redaktor, kus kahe kommentaarirea vahel on tühi osa. Mida sinna kirjutad, läheb faili /etc/systemd/system/nginx.service.d/override.conf. Näiteks: nginx käivitub automaatselt uuesti, kui see ootamatult peatub.
[Service]
Restart=on-failure
RestartSec=5sPärast salvestamist laadib systemctl edit systemd seadistuse ise uuesti. Kui muudad unit-faili mõnel muul viisil, tee ise:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxdaemon-reload paneb systemd unit-failid uuesti lugema; teenus ise tuleb pärast seda veel taaskäivitada, et muudatus kasutusele võtta. Täielikku tulemust (originaal koos drop-in-failidega) näed käsuga systemctl cat nginx.
Restart=on-failure on hea harjumus tähtsate teenuste puhul. Aga ära peida sellega päris viga: teenuse puhul, mis jookseb iga viie sekundi järel kokku ja käivitub uuesti, tuleb põhjust logist otsida. Pärast mõnda kiiret järjestikust ebaõnnestumist lõpetab systemd taaskäivitamise (vaikimisi piir on viis käivitust kümne sekundi jooksul) ja märgib teenuse olekuks failed.
AlmaLinuxis ja Rocky Linuxis
systemd ja systemctl töötavad täpselt samamoodi. Erinevad on vahel ainult teenuste nimed: SSH-teenus on sshd, distributsiooni veebiserver on httpd (Apache) või nginx ja tulemüür on firewalld.
Praktikas
Sinu teenusepakkuja VPS-i paneel (nii WebOkés kui mujal) võimaldab kogu serveri välja lülitada, taaskäivitada või „sundväljalülitada“. Viimane on sama mis pistiku seinast tõmbamine: teenused ei saa korrektselt peatuda ja andmebaas võib seejuures kahjustuda. Kasuta serveris käske sudo systemctl reboot või sudo shutdown -h now ning paneelis tavalist väljalülitamise või taaskäivitamise nuppu.
Kokkuvõte
- systemd käivitab ja jälgib kõiki teenuseid; seda juhid käsuga
systemctl. systemctl statusnäitab, kas teenus töötab, kas see käivitub alglaadimisel, ja viimaseid logiridu.start/stop/restartkehtivad praegu,enable/disablealglaadimise kohta; uue teenuse puhul kasutaenable --now.- Pärast seadistuse muutmist: kõigepealt testi, siis
reload;systemctl --failedpeaks olema tühi. - Ära kunagi muuda paketi unit-faili, vaid kasuta drop-in-faili käsuga
systemctl edit.
Test (quiz)
Ülesanne
Ülesanne O6.1: Sinu teenuste ülevaade. Koosta oma serveris nimekiri kõigist töötavatest teenustest (systemctl list-units --type=service --state=running) ja vaata, kas systemctl --failed on tühi. Märgi iga teenuse juurde, mida see teeb ja kas sul on seda vaja. Uuri ühe teenuse kohta, mida sa ei tundnud, välja, mis see on (systemctl status, man). Seejärel lisa ühele tähtsale teenusele drop-in-failiga Restart=on-failure ja kontrolli käsuga systemctl cat, et see on seal olemas.
Ülesanne O6.1: Sinu teenuste ülevaade
Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.
Drop-in asub failis /etc/systemd/system/<naam>.service.d/override.conf, mitte kaustas /usr/lib/systemd. Reloadi korral jääb teenus tööle ja näiteks nginx säilitab vea korral vana konfiguratsiooni; testi eelnevalt käsuga nginx -t või sshd -t. Üleliigsed teenused: disable --now või eemalda pakett.
Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.
Loe edasi
- Juhend
systemctl(1): https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - Juhend
systemd.service(5)(Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - Juhend
systemd.unit(5)(drop-in-failid): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html
