systemctl — upravljanje servisima
Kad na Linux serveru nešto radi u pozadini — veb server, baza, SSH,
zakazani poslovi — time upravlja systemd. A systemctl je
komanda kojom ti upravljaš njime.
Ovo je verovatno komanda koju ćeš kao administrator kucati najviše puta u životu.
Oblik komande
systemctl [radnja] [jedinica]
- radnja —
start,stop,status,enable… - jedinica — ime servisa, npr.
httpdilihttpd.service
Nastavak .service se podrazumeva, pa ga ne moraš pisati.
Sve radnje koje menjaju stanje sistema traže administratorska prava, pa idu uz sudo. Provere ne traže.
Šta je jedinica
systemd ne upravlja samo servisima. Sve čime barata zove se jedinica (unit), a servis je samo najčešći tip:
| Tip | Šta je |
|---|---|
.service | servis — program koji radi u pozadini |
.socket | soket koji pokreće servis kad stigne veza |
.timer | zakazano izvršavanje, alternativa za cron |
.mount | montiranje fajl sistema |
.target | grupa jedinica; naslednik runlevel-a |
Pet komandi koje pokrivaju devedeset posto posla
# systemctl start httpd pokreni sada # systemctl stop httpd zaustavi sada # systemctl restart httpd zaustavi pa pokreni # systemctl enable httpd pokreći se pri butovanju # systemctl status httpd šta se dešava
start i enable nisu isto
Ovo je najčešća greška početnika i vredi je razumeti odmah.
| Komanda | Efekat |
|---|---|
start | pokreće servis sada, ali posle restarta sistema ga nema |
enable | uključuje ga pri butovanju, ali ga sada ne pokreće |
Skoro uvek hoćeš oboje. Zato postoji skraćenica:
# systemctl enable --now httpd # systemctl disable --now httpd
Klasičan scenario: instaliraš servis, pokreneš ga sa start,
sve radi. Server se restartuje za mesec dana — servisa nema, jer
enable nikad nije urađen.
restart i reload
# systemctl restart httpd potpuni restart, veze se prekidaju # systemctl reload httpd ponovo čita konfiguraciju, bez prekida
Kad si samo izmenio konfiguraciju, reload je bolji — sajt ne
pada ni na sekundu. Ne podržavaju ga svi servisi. Ako nisi siguran:
# systemctl reload-or-restart httpd
status — glavna dijagnostika
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since Fri 2026-08-21 09:14:02 CEST; 5h ago
Docs: man:httpd.service(8)
Main PID: 1382 (httpd)
Tasks: 213 (limit: 23012)
Memory: 38.2M
CPU: 4.108s
CGroup: /system.slice/httpd.service
├─1382 /usr/sbin/httpd -DFOREGROUND
└─1383 /usr/sbin/httpd -DFOREGROUND
Aug 21 09:14:02 web01 systemd[1]: Starting The Apache HTTP Server...
Aug 21 09:14:02 web01 systemd[1]: Started The Apache HTTP Server.
Tri reda nose skoro sve:
- Loaded — gde je unit fajl i da li je
enabled(radiće posle restarta) ilidisabled - Active — trenutno stanje i koliko dugo traje
- poslednji redovi — izvod iz loga; kad servis ne startuje, odgovor je obično tu
Moguća stanja:
| Stanje | Značenje |
|---|---|
active (running) | radi |
active (exited) | odradio posao i završio — normalno za jednokratne jedinice |
inactive (dead) | zaustavljen |
failed | pokušao i pao |
activating | u toku pokretanja |
Napomena: status otvara ispis u
less-u, pa
se izlazi sa q. Ako ti to smeta u skripti, dodaj
--no-pager.
Provera bez ispisa
Za skripte, kad te zanima samo da ili ne:
$ systemctl is-active httpd active $ systemctl is-enabled httpd enabled $ systemctl is-failed httpd inactive
Sa --quiet ne ispisuje ništa, samo vraća izlazni kod:
if systemctl is-active --quiet httpd; then
echo "Apache radi"
fi
Ovaj obrazac je osnova svake skripte za nadzor — više u trećem delu bash serije.
Pregled svega na sistemu
$ systemctl sve učitane jedinice $ systemctl list-units --type=service samo servisi $ systemctl list-units --state=running samo oni koji rade $ systemctl --failed samo oni koji su pali
systemctl --failed je prva komanda kad se prijaviš na
server koji se čudno ponaša. Za tri sekunde vidiš šta nije startovalo.
Šta je sve podešeno da se pokrene pri butovanju:
$ systemctl list-unit-files --state=enabled
Vredi povremeno pogledati — na serverima se nakupe servisi koje niko ne koristi, a otvaraju portove.
Unit fajlovi
Svaka jedinica je opisana tekstualnim fajlom:
$ systemctl cat httpd
[Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target [Service] Type=notify ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND ExecReload=/usr/sbin/httpd $OPTIONS -k graceful Restart=on-failure [Install] WantedBy=multi-user.target
| Direktiva | Šta radi |
|---|---|
After= | šta mora biti spremno pre pokretanja |
ExecStart= | komanda koja se izvršava |
Restart= | da li se sam podiže posle pada |
WantedBy= | u kom targetu se aktivira |
Dva mesta, i to je bitno
/usr/lib/systemd/system/ fajlovi iz paketa — ne diraj /etc/systemd/system/ tvoje izmene — ovde radiš
Ako izmeniš fajl iz prvog direktorijuma, nadogradnja paketa će ga prepisati i tvoja izmena nestaje. Zato se izmene rade ovako:
# systemctl edit httpd
Otvara prazan fajl u koji upisuješ samo ono što menjaš. Nastaje
/etc/systemd/system/httpd.service.d/override.conf, koji
dopunjuje original i preživljava nadogradnju.
Posle svake izmene unit fajla:
# systemctl daemon-reload
Bez toga systemd i dalje radi po starom, a ti se pitaš zašto izmena nema efekta. Ovo se zaboravlja stalno.
Maskiranje
# systemctl mask httpd # systemctl unmask httpd
disable sprečava pokretanje pri butovanju, ali servis i
dalje može da pokrene neko ručno ili druga jedinica kao zavisnost.
mask ga potpuno onemogućava — pravi link na
/dev/null, pa se ne može pokrenuti nikako.
Koristi se kad servis mora da ostane ugašen, recimo kad si ga zamenio drugim.
Targets
Target je grupa jedinica i naslednik nekadašnjih runlevel-a:
| Target | Nekadašnji runlevel | Šta je |
|---|---|---|
multi-user.target | 3 | pun sistem, bez grafike |
graphical.target | 5 | sa grafičkim okruženjem |
rescue.target | 1 | jednokorisnički režim |
emergency.target | — | minimalni, za oporavak |
$ systemctl get-default multi-user.target # systemctl set-default multi-user.target # systemctl isolate rescue.target
Na serveru podrazumevani target treba da bude
multi-user — grafičko okruženje samo troši resurse.
Gašenje i restart sistema
# systemctl reboot # systemctl poweroff # systemctl suspend
Rade isto što i shutdown.
Kad servis ne startuje
Redosled provere koji rešava skoro sve:
1. Status
# systemctl status httpd -l --no-pager
Poslednji redovi obično sadrže grešku.
2. Logovi
# journalctl -u httpd -n 50 --no-pager # journalctl -u httpd --since "10 min ago"
Detaljno u lekciji journalctl.
3. Sintaksa konfiguracije
Servisi obično imaju sopstvenu proveru:
# httpd -t # nginx -t # sshd -t # named-checkconf
Uvek proveri konfiguraciju pre restarta. Ako je pogrešna, servis se zaustavi i ne podigne — a ti ostaneš bez njega dok ne nađeš grešku.
Najčešći uzroci
| Poruka | Šta obično znači |
|---|---|
Address already in use | port zauzet; proveri sa ss -tulnp |
Permission denied | dozvole nad fajlom, ili SELinux |
Unit not found | greška u imenu ili paket nije instaliran |
start request repeated too quickly | servis pada pri startu; pravi uzrok je u logu |
Za onaj poslednji — posle ispravke:
# systemctl reset-failed httpd # systemctl start httpd
Servis radi, ali nije dostupan spolja
Ako status kaže da radi, a ne možeš da mu priđeš — problem
je u firewallu, ne u servisu:
# firewall-cmd --add-service=http --permanent # firewall-cmd --reload
Više u lekciji firewalld.
Korisno pri analizi
$ systemctl list-dependencies httpd šta servis zahteva $ systemd-analyze koliko je trajalo butovanje $ systemd-analyze blame koja jedinica je najsporija
Poslednja je odgovor kad se server diže tri minuta a ne znaš zašto.
Vežba
- Pogledaj status SSH servisa i pronađi da li je
enabled - Zaustavi i pokreni neki servis, pa prati promenu kroz
systemctl status - Proveri ima li na sistemu jedinica u stanju
failed - Izlistaj sve servise koji se pokreću pri butovanju
- Pogledaj unit fajl za
sshdkrozsystemctl cat - Namerno napravi grešku u konfiguraciji Apache-a, pokušaj restart i
pronađi uzrok samo kroz
statusijournalctl - Pogledaj koliko je trajalo poslednje butovanje i šta ga je najviše usporilo
Povezano: journalctl · Proces butovanja Linuxa · shutdown · firewalld · Administracija i servisi
Comments
Post a Comment