Modul 6 · 6.1
Szolgáltatások kezelése a systemd segítségével
Modul 6: Szolgáltatások és naplók · Olvasási idő: 10 perc
Tanulási cél: A lecke végére Ön képes lesz szolgáltatásokat elindítani, leállítani, újratölteni és rendszerindításkor automatikusan elindíttatni, értelmezni egy szolgáltatás állapotát, valamint egy szolgáltatás beállítását biztonságosan módosítani egy drop-in fájllal.
Kulcsfogalmak: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=
Ki tartja életben az egészet?
Egy szerveren több tucat program fut, amelyeknek mindig elérhetőnek kell lenniük: az SSH-szerver, a webszerver, egy adatbázis, az időszinkronizálás. Ezeket a programokat szolgáltatásoknak (services vagy daemons) nevezzük. Valakinek rendszerindításkor el kell indítania, felügyelnie és újraindítania őket, ha leállnak. Debianon, Ubuntun, AlmaLinuxon és Rocky Linuxon ezt a systemd végzi. Ez az első program, amelyet a kernel elindít (1-es folyamat), és ezután ez indít el minden mást.
A systemd unitokkal dolgozik: ezek olyan leírások, amelyek megadják, mit kell kezelnie. A legfontosabb típusok:
| Típus | Kiterjesztés | Példa |
|---|---|---|
| Szolgáltatás | .service | nginx.service, ssh.service |
| Időzítő (ütemezett feladat) | .timer | apt-daily.timer (4.2. és 6.3. lecke) |
| Socket | .socket | ssh.socket Ubuntu 24.04-en és újabbakon |
| Cél (unitok csoportja) | .target | multi-user.target |
A systemd-vel a systemctl paranccsal kommunikál. A .service kiterjesztés elhagyható: a systemctl status nginx ugyanaz, mint a systemctl status nginx.service.
Az állapot értelmezése
A leggyakrabban használt parancs:
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...Olvassa fentről lefelé:
- A név előtti pötty zöld, ha a szolgáltatás fut, fehér, ha le van állítva, és piros, ha hibára futott.
- A Loaded sor megmutatja, hol található a unit-fájl, és hogy a szolgáltatás elindul-e rendszerindításkor (
enabled) vagy sem (disabled). - Az Active sor megmutatja, hogy a szolgáltatás éppen fut (
active (running)), le van állítva (inactive (dead)) vagy hibára futott (failed), és mióta. - A Main PID és a CGroup megmutatja, mely folyamatok tartoznak a szolgáltatáshoz.
- Alul a szolgáltatás naplójának utolsó sorai láthatók. Gyakran már itt kiderül, mi a hiba oka; többet a
journalctlparanccsal olvashat (6.2. lecke).
Indítás, leállítás, újraindítás és újratöltés
anna@web1:~$ sudo systemctl start nginx # indítás most
anna@web1:~$ sudo systemctl stop nginx # leállítás most
anna@web1:~$ sudo systemctl restart nginx # leállítás és újraindítás
anna@web1:~$ sudo systemctl reload nginx # konfiguráció újraolvasása leállítás nélkülA restart és a reload közötti különbség a gyakorlatban fontos. Restartnál a szolgáltatás egy pillanatra leáll: a meglévő kapcsolatok megszakadnak, és ha az új konfiguráció hibás, a szolgáltatás nem indul el újra, így a webhelye elérhetetlenné válik. Reloadnál a szolgáltatás futás közben olvassa be újra a konfigurációját; konfigurációs hiba esetén az nginx megtartja a régit. Az nginx, a Caddy, az SSH és a fail2ban esetében tehát konfigurációmódosítás után a reload parancsot használja, és előtte tesztelje a konfigurációt (nginx -t, sshd -t, fail2ban-client -t). Nem minden szolgáltatás ismeri a reloadot; a systemctl reload-or-restart maga dönt.
Rendszerindításkor: enable és disable
Az indítás és a „rendszerindításkor való indítás” két különböző dolog:
anna@web1:~$ sudo systemctl enable nginx # ezentúl rendszerindításkor elindul
anna@web1:~$ sudo systemctl disable nginx # rendszerindításkor többé nem indul el
anna@web1:~$ sudo systemctl enable --now nginx # mindkettő: indítás most és rendszerindításkor is
anna@web1:~$ systemctl is-enabled nginx
enabledKlasszikus hiba: elindít egy szolgáltatást a start paranccsal, minden működik, majd a következő újraindítás után (például egy kernelfrissítés miatt, 4.2. lecke) a szolgáltatás eltűnik. Új szolgáltatáshoz ezért a enable --now parancsot használja.
Ha biztosra akar menni, hogy egy szolgáltatás soha ne induljon el, akkor sem, ha egy másik szolgáltatás igényli, erre szolgál a mask: sudo systemctl mask <dienst>. Visszavonás: unmask.
Mi a hiba?
Egyetlen parancs megmutatja az összes hibára futott unitot:
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.Tegye ezt szokássá, például minden újraindítás és minden frissítés után (4.3. lecke): a listának üresnek kell lennie. A hiba elhárítása után a jelzést a sudo systemctl reset-failed paranccsal törölheti.
Az összes futó szolgáltatás áttekintése:
anna@web1:~$ systemctl list-units --type=service --state=runningHa fut valami, amit nem ismer vagy nem használ, derítse ki, mi az. Minden szükségtelen szolgáltatás felesleges támadási felületet jelent (5.1. és 10.1. lecke).
Unit-fájlok és drop-in fájlok
A unit-fájl egy szöveges fájl. A csomag által telepített változat a /usr/lib/systemd/system/ könyvtárban található (régebbi rendszereken a /lib/systemd/system/ könyvtárban). Ezt soha ne módosítsa: a csomag frissítése felülírja. A saját módosításait egy drop-in fájlba írja: ez egy kis fájl, amely csak azokat a sorokat tartalmazza, amelyeket meg szeretne változtatni. Ez a legegyszerűbben így megy:
anna@web1:~$ sudo systemctl edit nginxMegnyílik egy szerkesztő, benne két megjegyzéssor között egy üres résszel. Amit oda ír, az a /etc/systemd/system/nginx.service.d/override.conf fájlba kerül. Például: az nginx automatikus újraindítása, ha váratlanul leáll.
[Service]
Restart=on-failure
RestartSec=5sMentés után a systemctl edit automatikusan újratölti a systemd konfigurációját. Ha egy unit-fájlt más módon szerkeszt, akkor ezt Önnek kell megtennie:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxA daemon-reload újraolvastatja a systemd-vel a unit-fájlokat; magát a szolgáltatást ezután még újra kell indítani, hogy a módosítás érvénybe lépjen. A teljes eredményt (az eredeti fájl és a drop-in fájlok együtt) a systemctl cat nginx paranccsal tekintheti meg.
A Restart=on-failure jó gyakorlat a fontos szolgáltatásoknál. Valódi hibát azonban ne rejtsen el vele: egy ötmásodpercenként összeomló és újrainduló szolgáltatás okát a naplóban kell megkeresni. A systemd néhány gyors egymás utáni hiba után abbahagyja az újraindítást (az alapértelmezett határ öt indítás tíz másodpercen belül), és a szolgáltatást failed állapotba teszi.
AlmaLinuxon és Rocky Linuxon
A systemd és a systemctl pontosan ugyanígy működik. Csak a szolgáltatások neve tér el néha: az SSH-szolgáltatás neve sshd, a disztribúció webszervere httpd (Apache) vagy nginx, a tűzfal pedig firewalld.
A gyakorlatban
A szolgáltató VPS-felülete (a WebOkénál és máshol is) képes a teljes szervert leállítani, újraindítani vagy „kényszerítetten leállítani”. Ez utóbbi olyan, mintha kihúzná a tápkábelt: a szolgáltatások nem kapnak lehetőséget a szabályos leállásra, és egy adatbázis ilyenkor megsérülhet. A szerveren belül a sudo systemctl reboot vagy a sudo shutdown -h now parancsot használja, a panelen pedig a szokásos leállítás vagy újraindítás gombot.
Összefoglalás
- A systemd indítja és felügyeli az összes szolgáltatást; a
systemctlparanccsal kezelheti. - A
systemctl statusmegmutatja, hogy egy szolgáltatás fut-e, elindul-e rendszerindításkor, valamint az utolsó naplósorokat. - A
start/stop/restarta pillanatnyi állapotra vonatkozik, aenable/disablea rendszerindításra; új szolgáltatáshoz aenable --nowparancsot használja. - Konfigurációmódosítás után: először teszt, aztán
reload; asystemctl --failedkimenetének üresnek kell lennie. - Soha ne módosítsa egy csomag unit-fájlját, hanem használjon drop-in fájlt a
systemctl editsegítségével.
Kvíz
Feladat
Feladat O6.1: Az Ön szolgáltatásainak feltérképezése. Készítsen listát a szerverén futó összes szolgáltatásról (systemctl list-units --type=service --state=running), és ellenőrizze, hogy a systemctl --failed kimenete üres-e. Minden szolgáltatásnál írja le, mit csinál, és szüksége van-e rá. Egy olyan szolgáltatásnál, amelyet eddig nem ismert, derítse ki, mi az (systemctl status, man). Ezután egy fontos szolgáltatásnál állítsa be a Restart=on-failure opciót egy drop-in fájlban, és a systemctl cat paranccsal ellenőrizze, hogy szerepel benne.
O6.1. feladat: Az Ön szolgáltatásainak feltérképezése
Ezt a feladatot saját maga végzi el, senki nem ellenőrzi. Pipálja ki, amit elvégzett, és jelölje meg a feladatot elvégzettként.
A drop-in fájl helye /etc/systemd/system/<naam>.service.d/override.conf, nem pedig /usr/lib/systemd. A reload során a szolgáltatás tovább fut, és például az nginx hiba esetén megtartja a régi konfigurációt; előtte tesztelje nginx -t vagy sshd -t paranccsal. Felesleges szolgáltatások: disable --now, vagy a csomag eltávolítása.
A pipái és jegyzetei csak ebben a böngészőben maradnak meg, sehova nem küldjük el őket. Ha bejelentkezett, a Fiókomban csak azt tároljuk, hogy elvégezte a feladatot.
További olvasnivaló
- A
systemctl(1)kézikönyve: https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - A
systemd.service(5)kézikönyve (Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - A
systemd.unit(5)kézikönyve (drop-in fájlok): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html - Szolgáltatások kezelése a systemctl segítségével a VPS-én
