İçeriğe geç

Systemd servisi başlatılamıyor: nedeni nasıl bulunur

Orta 15 dk Güncellendi:

Kısa cevap

Bir systemd servisi başlatılamadığında, önce `systemctl status servis-adi` komutuyla durumu kontrol edin ve `journalctl -u servis-adi` ile günlükleri inceleyin. Nedeni yapılandırma hatası, eksik dosya, yanlış izinler veya başarısız bir bağımlılık olabilir. Sistematik teşhis için adımları izleyin.

Sorun nasıl anlaşılır

  • Servis failed veya inactive durumunda
  • Servisi başlatmak hata döndürüyor
  • Servis başlıyor ve hemen çöküyor
  • Bağlantı noktasındaki uygulama yanıt vermiyor
  • Günlüklerde hata mesajları görünüyor

En yaygın nedenler

Servis yapılandırma hatası

Geçersiz unit dosyası, yürütülebilir dosyaya yanlış yol veya eksik parametreler başlatmayı engeller.

Eksik izinler veya sahiplik

Servisin yapılandırmayı okuma, dizine yazma veya ağa erişme hakkı olmayabilir.

Bağımlılık karşılanmıyor

Servis, başlatma anında kullanılamayan başka bir servise, ağa veya disk bağlamasına bağımlıdır.

Bağlantı noktası meşgul

Başka bir uygulama, servisin kullanmaya çalıştığı bağlantı noktasını zaten kullanıyor.

Eksik dosyalar veya kitaplıklar

Yürütülebilir dosya, yapılandırma dosyası veya paylaşılan kitaplık beklenen konumda yok.

Adım adım çözüm

  1. 1

    Servis durumunu kontrol edin

    systemctl status servis-adi komutunu çalıştırın. Duruma (failed, inactive) ve son hata mesajlarına dikkat edin. Durum genellikle nedenin ilk ipucunu verir.

  2. 2

    Günlükleri inceleyin

    Ayrıntılı günlükler için journalctl -u servis-adi -xe kullanın. -e seçeneği sona atlar, -x açıklamalar verir. Servis yakın zamanda çöktüyse --since "10 min ago" ekleyin.

  3. 3

    Unit dosyasını kontrol edin

    Unit dosyasının içeriğini görmek için systemctl cat servis-adi komutunu çalıştırın. Yürütülebilir dosya ve yapılandırma yollarının doğru olduğundan ve sözdizimi hatası olmadığından emin olun.

  4. 4

    Yürütülebilir dosyayı elle test edin

    ExecStart içindeki komutu, User= ile belirtilen kullanıcı olarak elle çalıştırın. Elle çalışıyorsa sorun servis ortamındadır (değişkenler, izinler).

  5. 5

    İzinleri ve sahipliği kontrol edin

    Servis kullanıcısının gerekli dizinlerde okuma ve yazma hakkı olduğundan emin olun. Yolu kontrol etmek için ls -l ve namei -l kullanın.

  6. 6

    Bağımlılıkları kontrol edin

    systemctl list-dependencies servis-adi komutunu çalıştırın. Tüm bağımlılıkların etkin olduğundan emin olun. Bağımlı servisi elle başlatıp yeniden deneyebilirsiniz.

  7. 7

    Bağlantı noktasının meşgul olup olmadığını kontrol edin

    Bağlantı noktasını hangi sürecin tuttuğunu görmek için sudo ss -tulnp | grep :PORT kullanın. Meşgulse, hangi süreç olduğunu kontrol edin ve yalnızca güvenliyse durdurun veya yapılandırmada bağlantı noktasını değiştirin.

  8. 8

    Systemd'yi yeniden yükleyin ve servisi başlatın

    Unit dosyasını değiştirdikten sonra systemctl daemon-reload, ardından systemctl start servis-adi komutunu çalıştırın. Durumu tekrar kontrol edin.

Hiçbir şey işe yaramazsa

Servis hala başlatılamıyorsa, bir kaynak sınırlaması (ör. LimitNOFILE) veya SELinux/AppArmor olup olmadığını kontrol edin. SELinux'u test ediyorsanız, yalnızca test sisteminde geçici olarak permissive moda alın (setenforce 0) ve hemen enforcing moda döndürün (setenforce 1); üretim sisteminde korumayı kalıcı olarak kapatmayın. Ayrıca servisle doğrudan ilgili olmayan hatalar için sistem günlüklerine (journalctl -b) bakın. Karmaşık durumlar için ExecStart komutunu strace -f altında çalıştırarak nerede durduğunu görün.

Tekrarlanmaması için

  • Systemd ve servisleri düzenli olarak güncelleyin
  • Unit dosyalarını kontrol etmek için `systemd-analyze verify` kullanın
  • Kritik servisler için izleme kurun
  • Yapılandırma değişikliklerinin kaydını tutun

Ne zaman uzmana başvurmalı

Tüm adımları denediyseniz ve servis hala çalışmıyorsa veya root hesabına erişiminiz yoksa, BT desteğine başvurun. Sistemi daha derinlemesine analiz edebilir ve gelişmiş teknikleri güvenli bir şekilde uygulayabilirler.

BT altyapı bakımı · Sunucular, ağlar, yedekleme, güvenlik ve yardım masası

Sık sorulan sorular

Bir servisin tüm günlüklerini nasıl görürüm?

Tüm kayıtları görmek için `journalctl -u servis-adi` komutunu `-e` seçeneği olmadan kullanın. Günlükleri gerçek zamanlı izlemek için `-f` ekleyebilirsiniz.

"status=203/EXEC" hatası ne anlama gelir?

Systemd'nin `ExecStart` içindeki komutu yürütemediğini gösterir. Yolu, izinleri ve dosyanın var olup olmadığını kontrol edin.

Servisin çalıştığı kullanıcıyı nasıl değiştiririm?

Unit dosyasındaki `User=` değerini değiştirin (en iyisi `systemctl edit servis-adi` ile), ardından `systemctl daemon-reload` çalıştırın ve servisi yeniden başlatın.

Paylaş
Çözüm bulamadınız mı?AI BT asistanı 7/24 hizmetinizde. Sorunu anlatın veya hatanın ekran görüntüsünü gönderin, durumunuza özel talimat alın.AI BT asistanına sorun