Kratak odgovor
Kada systemd servis neće da se pokrene, prvo proverite status komandom `systemctl status ime-servisa` i pregledajte logove pomoću `journalctl -u ime-servisa`. Uzrok može biti greška u konfiguraciji, nedostajući fajl, pogrešne dozvole ili neuspešna zavisnost. Sledite korake za sistematsku dijagnostiku.
Kako se problem prepoznaje
- Servis je u stanju failed ili inactive
- Pokretanje servisa vraća grešku
- Servis se pokrene pa odmah padne
- Aplikacija na portu ne odgovara
- U logovima se pojavljuju poruke o grešci
Najčešći uzroci
Greška u konfiguraciji servisa
Neispravan unit fajl, pogrešna putanja do izvršnog fajla ili nedostajući parametri sprečavaju pokretanje.
Nedostajuće dozvole ili vlasništvo
Servis možda nema prava da čita konfiguraciju, piše u direktorijum ili pristupi mreži.
Zavisnost nije ispunjena
Servis zavisi od drugog servisa, mreže ili montiranja diska koji nisu dostupni u trenutku pokretanja.
Port je zauzet
Druga aplikacija već koristi port koji servis pokušava da zauzme.
Nedostajući fajlovi ili biblioteke
Izvršni fajl, konfiguracioni fajl ili deljena biblioteka ne postoje na očekivanoj lokaciji.
Rešenje korak po korak
- 1
Proverite status servisa
Pokrenite
systemctl status ime-servisa. Obratite pažnju na stanje (failed, inactive) i poslednje poruke o grešci. Status često daje prvi nagoveštaj uzroka. - 2
Pregledajte logove
Koristite
journalctl -u ime-servisa -xeza detaljne logove. Opcija-eskače na kraj, a-xdaje objašnjenja. Ako je servis skoro pao, dodajte--since "10 min ago". - 3
Proverite unit fajl
Pokrenite
systemctl cat ime-servisada vidite sadržaj unit fajla. Uverite se da su putanje do izvršnog fajla i konfiguracije tačne i da nema sintaksnih grešaka. - 4
Testirajte izvršni fajl ručno
Izvršite komandu iz
ExecStartručno kao korisnik naveden uUser=. Ako ručno radi, problem je u okruženju servisa (promenljive, dozvole). - 5
Proverite dozvole i vlasništvo
Uverite se da korisnik servisa ima prava čitanja i pisanja na potrebne direktorijume. Koristite
ls -linamei -lza proveru putanje. - 6
Proverite zavisnosti
Pokrenite
systemctl list-dependencies ime-servisa. Uverite se da su sve zavisnosti aktivne. Možete ručno pokrenuti zavisni servis i ponovo pokušati. - 7
Proverite da li je port zauzet
Koristite
sudo ss -tulnp | grep :PORTda vidite koji proces drži port. Ako je zauzet, proverite koji je proces u pitanju pa ga zaustavite samo ako je bezbedno, ili promenite port u konfiguraciji. - 8
Ponovo učitajte systemd i pokrenite servis
Nakon izmena unit fajla, pokrenite
systemctl daemon-reload, zatimsystemctl start ime-servisa. Ponovo proverite status.
Ako ništa ne pomogne
Ako servis i dalje neće da se pokrene, proverite da li postoji ograničenje resursa (npr. LimitNOFILE) ili SELinux/AppArmor. Ako testirate SELinux, privremeno ga prebacite u permissive režim (setenforce 0) samo na test sistemu i odmah vratite u enforcing režim (setenforce 1); ne isključujte zaštitu trajno na produkcionom sistemu. Pogledajte i sistemske logove (journalctl -b) za greške koje nisu vezane direktno za servis. Za složene slučajeve, pokrenite komandu iz ExecStart pod strace -f da vidite gde se zaustavlja.
Kako da sprečite da se ponovi
- Redovno ažurirajte systemd i servise
- Koristite `systemd-analyze verify` za proveru unit fajlova
- Postavite nadzor nad ključnim servisima
- Vodite evidenciju o izmenama konfiguracije
Kada je bolje pozvati stručnjaka
Ako ste isprobali sve korake i servis i dalje ne radi, ili ako nemate pristup root nalogu, obratite se IT podršci. Oni mogu dublje analizirati sistem i bezbedno primeniti napredne tehnike.
Održavanje IT infrastrukture · Serveri, mreže, backup, bezbednost i helpdeskČesta pitanja
Kako da vidim sve logove za servis?
Koristite `journalctl -u ime-servisa` bez opcije `-e` da vidite sve zapise. Možete dodati `-f` da pratite logove u realnom vremenu.
Šta znači greška "status=203/EXEC"?
Označava da systemd nije mogao da izvrši komandu iz `ExecStart`. Proverite putanju, dozvole i da li fajl postoji.
Kako da promenim korisnika pod kojim se servis izvršava?
Izmenite `User=` u unit fajlu (najbolje putem `systemctl edit ime-servisa`), zatim pokrenite `systemctl daemon-reload` i restartujte servis.