Modul 6 · 6.1
Upravljanje servisima pomoću systemd
Modul 6: Servisi i zapisi · Vrijeme čitanja: 10 minuta
Cilj učenja: Nakon ove lekcije moći ćete pokretati, zaustavljati i ponovno učitavati servise te ih pokretati pri podizanju sustava, čitati status servisa i sigurno promijeniti postavku servisa pomoću drop-in datoteke.
Ključni pojmovi: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=
Tko održava sve u radu?
Na poslužitelju radi na desetke programa koji moraju uvijek biti dostupni: SSH poslužitelj, web-poslužitelj, baza podataka, sinkronizacija vremena. Takvi se programi nazivaju servisi (usluge, services ili daemoni). Netko ih mora pokrenuti pri podizanju sustava, nadzirati ih i ponovno pokrenuti ako se sruše. Na Debianu, Ubuntuu, AlmaLinuxu i Rocky Linuxu to radi systemd. To je prvi program koji kernel pokreće (proces 1), a on zatim pokreće sve ostalo.
systemd radi s unitima: opisima nečega čime mora upravljati. Najvažnije vrste:
| Vrsta | Ekstenzija | Primjer |
|---|---|---|
| Servis | .service | nginx.service, ssh.service |
| Timer (zakazani zadatak) | .timer | apt-daily.timer (lekcija 4.2, lekcija 6.3) |
| Socket | .socket | ssh.socket na Ubuntuu 24.04 i novijim |
| Cilj (skupina unita) | .target | multi-user.target |
Sa systemd komunicirate naredbom systemctl. Ekstenziju .service možete izostaviti: systemctl status nginx isto je što i systemctl status nginx.service.
Čitanje statusa
Naredba koju ćete najčešće koristiti:
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...Čitajte je odozgo prema dolje:
- Točkica ispred naziva zelena je kod servisa koji radi, bijela kod zaustavljenog i crvena kod neuspjelog.
- Loaded pokazuje gdje se nalazi unit datoteka i pokreće li se servis pri podizanju sustava (
enabled) ili ne (disabled). - Active pokazuje radi li servis sada (
active (running)), je li zaustavljen (inactive (dead)) ili nije uspio (failed), te od kada. - Main PID i CGroup pokazuju koji procesi pripadaju servisu.
- Na dnu su posljednji retci iz zapisnika servisa. Često tamo već piše zašto nešto ne radi; više ćete pročitati s
journalctl(lekcija 6.2).
Pokretanje, zaustavljanje, ponovno pokretanje i ponovno učitavanje
anna@web1:~$ sudo systemctl start nginx # pokreni sada
anna@web1:~$ sudo systemctl stop nginx # zaustavi sada
anna@web1:~$ sudo systemctl restart nginx # zaustavi i ponovno pokreni
anna@web1:~$ sudo systemctl reload nginx # ponovno učitaj konfiguraciju bez zaustavljanjaRazlika između restart i reload u praksi je važna. Kod restarta servis se na trenutak zaustavi: postojeće veze se prekidaju, a ako nova konfiguracija sadrži pogrešku, servis se više ne pokreće i Vaša web-stranica ne radi. Kod reloada servis ponovno čita svoju konfiguraciju dok i dalje radi; ako konfiguracija sadrži pogrešku, nginx zadržava staru. Za nginx, Caddy, SSH i fail2ban nakon promjene konfiguracije stoga koristite reload, a konfiguraciju najprije testirajte (nginx -t, sshd -t, fail2ban-client -t). Ne podržava svaki servis reload; systemctl reload-or-restart sam odabire.
Pri podizanju sustava: enable i disable
Pokretanje i "pokretanje pri podizanju sustava" dvije su različite stvari:
anna@web1:~$ sudo systemctl enable nginx # ubuduće se pokreće pri podizanju sustava
anna@web1:~$ sudo systemctl disable nginx # više se ne pokreće pri podizanju sustava
anna@web1:~$ sudo systemctl enable --now nginx # oboje: pokreni sada i pri podizanju sustava
anna@web1:~$ systemctl is-enabled nginx
enabledKlasična pogreška: pokrenete servis s start, sve radi, a nakon sljedećeg ponovnog pokretanja (na primjer zbog ažuriranja kernela, lekcija 4.2) servisa više nema. Za novi servis stoga koristite enable --now.
Želite li biti sigurni da se servis nikada ne pokrene, čak ni kada ga zatraži neki drugi servis, postoji mask: sudo systemctl mask <dienst>. Poništavate to s unmask.
Što ne radi?
Jedna naredba prikazuje sve neuspjele unite:
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.Neka Vam to postane navika, na primjer nakon svakog ponovnog pokretanja i svake nadogradnje (lekcija 4.3): popis bi trebao biti prazan. Nakon rješavanja problema obavijest uklanjate s sudo systemctl reset-failed.
Pregled svih servisa koji rade:
anna@web1:~$ systemctl list-units --type=service --state=runningAko radi nešto što ne poznajete ili ne koristite, istražite što je to. Svaki servis koji nije potreban nepotrebna je površina za napad (lekcija 5.1 i 10.1).
Unit datoteke i drop-in datoteke
Unit datoteka je tekstualna datoteka. Verzija iz paketa nalazi se u /usr/lib/systemd/system/ (na starijim sustavima /lib/systemd/system/). Nju nikada ne mijenjate: ažuriranje paketa je prepisuje. Vlastite izmjene stavljate u drop-in: malu datoteku koja sadrži samo retke koje želite promijeniti. Najlakše je to napraviti ovako:
anna@web1:~$ sudo systemctl edit nginxOtvara se uređivač s praznim dijelom između dva retka komentara. Ono što ondje napišete sprema se u /etc/systemd/system/nginx.service.d/override.conf. Na primjer: automatsko ponovno pokretanje nginxa ako se neočekivano zaustavi.
[Service]
Restart=on-failure
RestartSec=5sNakon spremanja systemctl edit sam ponovno učitava konfiguraciju systemd-a. Uređujete li unit datoteku na neki drugi način, učinite to sami:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxdaemon-reload nalaže systemd-u da ponovno pročita unit datoteke; sam servis zatim treba ponovno pokrenuti kako bi koristio promjenu. Cjelokupan rezultat (izvornik plus drop-in datoteke) vidite s systemctl cat nginx.
Restart=on-failure dobra je navika za važne servise. No njime nemojte skrivati stvarnu pogrešku: servis koji se svakih pet sekundi sruši i ponovno pokrene treba istražiti u zapisniku. systemd nakon nekoliko brzih uzastopnih neuspjeha prestaje s ponovnim pokretanjem (zadana granica je pet pokretanja unutar deset sekundi) i postavlja servis u stanje failed.
Na AlmaLinuxu i Rocky Linuxu
systemd i systemctl rade potpuno jednako. Samo se nazivi servisa ponekad razlikuju: SSH servis zove se sshd, web-poslužitelj iz distribucije zove se httpd (Apache) ili nginx, a vatrozid firewalld.
U praksi
VPS sučelje Vašeg pružatelja usluge (kod WebOké i drugdje) može cijeli poslužitelj isključiti, ponovno pokrenuti ili "prisilno isključiti". Ovo posljednje jednako je izvlačenju utikača: servisi nemaju priliku uredno se zaustaviti, a baza podataka se pritom može oštetiti. Unutar poslužitelja koristite sudo systemctl reboot ili sudo shutdown -h now, a u sučelju običan gumb za isključivanje ili ponovno pokretanje.
Sažetak
- systemd pokreće i nadzire sve servise; njime upravljate pomoću
systemctl. systemctl statuspokazuje radi li servis, pokreće li se pri podizanju sustava te posljednje retke zapisa.start/stop/restartvrijede za sada,enable/disableza podizanje sustava; za novi servis koristiteenable --now.- Nakon promjene konfiguracije: najprije testirajte, zatim
reload;systemctl --failedbi trebao biti prazan. - Nikada ne mijenjajte unit datoteku iz paketa, nego koristite drop-in s
systemctl edit.
Kviz
Zadatak
Zadatak O6.1: Pregled Vaših usluga. Na svom poslužitelju napravite popis svih servisa koji rade (systemctl list-units --type=service --state=running) i provjerite je li systemctl --failed prazan. Za svaki servis navedite što radi i trebate li ga. Za jedan servis koji niste poznavali istražite što je (systemctl status, man). Zatim za jedan važan servis postavite Restart=on-failure u drop-in datoteku i s systemctl cat provjerite je li postavka ondje.
Zadatak O6.1: Pregled Vaših usluga
Ovaj zadatak rješavate sami; nitko ga ne provjerava. Označite što ste napravili i označite zadatak kao završen.
Drop-in se nalazi u /etc/systemd/system/<naam>.service.d/override.conf, ne u /usr/lib/systemd. Kod reloada usluga nastavlja raditi, a primjerice nginx kod pogreške zadržava staru konfiguraciju; unaprijed testirajte s nginx -t ili sshd -t. Nepotrebne usluge: disable --now ili uklonite paket.
Vaše kvačice i bilješke ostaju samo u ovom pregledniku; ne šaljemo ih nikamo. Ako ste prijavljeni, u Moji tečajevi čuvamo samo podatak da ste zadatak završili.
Dodatno štivo
- Priručnik
systemctl(1): https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - Priručnik
systemd.service(5)(Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - Priručnik
systemd.unit(5)(drop-in datoteke): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html
