Preskoči na sadržaj

Systemd servis neće da se pokrene: kako da pronađete uzrok

Srednje 15 min Ažurirano:

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. 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. 2

    Pregledajte logove

    Koristite journalctl -u ime-servisa -xe za detaljne logove. Opcija -e skače na kraj, a -x daje objašnjenja. Ako je servis skoro pao, dodajte --since "10 min ago".

  3. 3

    Proverite unit fajl

    Pokrenite systemctl cat ime-servisa da 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. 4

    Testirajte izvršni fajl ručno

    Izvršite komandu iz ExecStart ručno kao korisnik naveden u User=. Ako ručno radi, problem je u okruženju servisa (promenljive, dozvole).

  5. 5

    Proverite dozvole i vlasništvo

    Uverite se da korisnik servisa ima prava čitanja i pisanja na potrebne direktorijume. Koristite ls -l i namei -l za proveru putanje.

  6. 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. 7

    Proverite da li je port zauzet

    Koristite sudo ss -tulnp | grep :PORT da 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. 8

    Ponovo učitajte systemd i pokrenite servis

    Nakon izmena unit fajla, pokrenite systemctl daemon-reload, zatim systemctl 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.

Podeli
Niste našli rešenje?AI IT asistent je dostupan 24/7. Opišite problem ili pošaljite screenshot greške i dobićete uputstvo za vaš slučaj.Pitajte AI IT asistenta