systemd servisi başlamıyor: systemctl status ve journalctl ile hata bulma

Linux Sunucu (SSH) 60 görüntülenme Markdown

Bir servisi başlatmaya çalışıyorsunuz ve systemctl start uygulama ya hata veriyor ya da servis "failed" durumuna düşüyor. Doğru yaklaşım tahmin etmek değil, sistemin kaydettiği hatayı okumaktır. İki komut hemen her sorunu açıklar.

1. Durumu görün

systemctl status uygulama

Çıktıdaki Active: satırı durumu söyler: active (running) çalışıyor, failed başarısız, activating (auto-restart) sürekli çöküp yeniden başlıyor demektir. Altında son birkaç günlük satırı ve Process: ... status=203/EXEC gibi bir çıkış kodu bulunur.

2. Tam günlüğü okuyun

sudo journalctl -u uygulama -n 50 --no-pager
sudo journalctl -xeu uygulama

İlk komut servisin son 50 satırını, ikincisi (-xe) ayrıntılı açıklamalı son kayıtları gösterir. Bir sonraki denemeyi izlemek için ayrı bir pencerede sudo journalctl -fu uygulama çalıştırın (-f canlı akış). Programın kendi hata çıktısı genellikle buraya düşer.

Çıkış koduna göre sebepler

  • 203/EXEC: systemd ExecStart satırındaki programı çalıştıramadı. Dosya yok, yol yanlış, dosyanın çalıştırma izni yok (chmod +x) ya da betiğin ilk satırı (#!/usr/bin/env python3) hatalı. Yolu elle kontrol edin: ls -l /srv/uygulama/venv/bin/gunicorn.
  • 217/USER: Servis dosyasında belirtilen User= sistemde yok. getent passwd www-data ile kullanıcıyı kontrol edin.
  • 200/CHDIR: WorkingDirectory klasörü yok ya da erişilemiyor.
  • 1 ya da 2: Program kendisi hatayla çıktı. Günlükteki mesaj nedenini yazar (eksik paket, hatalı ayar, kullanılan port).
  • "Address already in use": Port zaten kullanımda: sudo ss -tlnp | grep 8000.
  • "Permission denied": Kullanıcının dosya ya da klasöre erişim izni yok. Sahibi ve izinleri düzeltin: dosya izinleri.
  • Sürekli yeniden başlıyor: Restart=on-failure ile döngüye girmiş olabilir. Bir sınır aşılınca systemd "start request repeated too quickly" der; hatayı düzeltip sudo systemctl reset-failed uygulama ile sayacı sıfırlayın.

Servis dosyasını denetleyin

systemd-analyze verify /etc/systemd/system/uygulama.service

Bu komut söz dizimi hatalarını ve eksik yolları, servisi başlatmadan bildirir (ör. "Command ... is not executable: No such file or directory"). Dosyayı her değiştirdiğinizde sudo systemctl daemon-reload çalıştırmayı unutmayın; aksi halde systemd eski halini kullanır.

Elle çalıştırarak deneyin

Servisi çalıştıran kullanıcıyla komutu elle çalıştırmak çoğu zaman hatayı doğrudan ekrana basar:

sudo -u www-data /srv/uygulama/venv/bin/gunicorn --bind 127.0.0.1:8000 uygulama:app

Elle çalışıp serviste çalışmıyorsa fark ortam değişkenlerinde (servis temiz bir ortamla başlar), çalışma klasöründe ya da kullanıcı izinlerindedir. Servis yazımı için örnek: Gunicorn ve systemd. Sunucu açılışında servisin başlaması için sudo systemctl enable uygulama gerekir.

Sık sorulanlar

journalctl hiçbir şey göstermiyor.

Yetkisiz kullanıcı yalnızca kendi kayıtlarını görür; sudo kullanın. Kalıcı günlük kapalıysa yeniden başlatma sonrası eski kayıtlar silinir: sudo mkdir -p /var/log/journal.

Servis çalışıyor ama uygulama cevap vermiyor.

Port ya da bağlama adresi (127.0.0.1 ya da 0.0.0.0) yanlış olabilir; ss -tlnp ile kontrol edin ve güvenlik duvarına bakın.

Eski bir servis dosyasını silemiyorum.

Dosyayı silin, sudo systemctl daemon-reload ve sudo systemctl reset-failed çalıştırın. Etkin bağlantı için önce sudo systemctl disable --now adi.

İlgili makaleler

Sorununuz çözülmediyse destek talebi açın. Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.