Auteur de la discussion
#1
Giriş
Bir Linux sistemi üzerinde hangi servisin neden çalışmadığını bulmak çoğu zaman sorun gidermenin temel adımıdır. Özellikle systemd tabanlı dağıtımlarda systemctl komutu, servislerin mevcut durumunu, başlangıç davranışını ve son log girişlarını hızlıca özetler. Bu thread’de systemctl status komutunun nasıl okunacağını adım adım ele alıp, sık karşılaşılan durumlar için pratik yorumlar ve çözüm önerileri paylaşacağız.
Gözlemlenen durumlar ve anlamları
- aktif (running): Servis başarıyla başlatılmış ve çalışıyor demektir. Başlatılırken herhangi bir hata mesajı yoksa işlevsel görünür.
- failed: Servis başlangıcında hata oluşmuş. Birim (unit) dosyası, bağımlılık ya da konfigürasyon hatası nedeniyle çalışmayı durdurmuş olabilir.
- activating veya deactivating: Başlatma süreci devam ediyor ya da durduruluyor anlamında. Genelde servis bağımlılıkları veya yığın başlatma sürecinde görülebilir.
- dead: Birim mevcut durumda etkisiz fakat hafızada çalışmıyor. Autostart veya manuel müdahale ile yeniden başlatılabilir.
- hung: Servis başlangıç aşamasında kilitlenmiş, watchdog veya disk I/O gibi darboğazlar bu durumu tetikleyebilir.
- failed (result: exit-code, time, watchdog, etc.): Sonuç türüne bağlı olarak spesifik hata sebeplerini gösterir. exit-code ise programın anlık hatasından kaynaklanır; watchdog ise belirlenen süre zarfında yanıt gelmediğini belirtir.
pratik kullanım örnekleri ve nasıl yorumlanır
- temel durum kontrolü: systemctl status nginx.service
- Aktif görünüyor ve son 2-3 satırda “active (running)” ifadesi varsa genel sağlık iyidir.
- “[...] Main PID: 1234 (nginx)” satırı, ana işlem kimliğini ve çalışan süreçleri gösterir.
- hata durumunda olaylar: systemctl status mysql.service
- “Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)” gibi satırlar konfigürasyonun doğru yüklendiğini gösterir.
- “Active: failed (Result: exit-code) since ...” halinde, altındaki “Process: 5678 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)” gibi ayrıntılar hatanın kaynağını işaret eder.
- log incelemesiyle ayrıntı: journalctl -u nginx.service -n 50 --no-pager
- Bu komut, ilgili birime ait son 50 satır logu getirir ve hatanın kökenine ışık tutar.
- “permission denied” ya da “socket already in use” gibi satırlar, konfigürasyon veya port/izin sorunlarını gösterir.
- yeniden başlatma ve etkileri: systemctl restart firewalld.service
- Yeniden başlatma, çoğu zaman geçici konfigürasyon hatalarını temizler; ancak dikkat edilmesi gereken, yeniden başlatma sırasındaki trafiğin etkilenebilmesidir.
- kapsamlı teşhis adımları
- Biriminizi yeniden yükleyin: systemctl daemon-reload
- Servisin bağımlılık zincirini kontrol edin: systemctl list-dependencies --after nginx.service
- Konfigurasyon değişikliklerini doğrulayın: yeniden yüklenen konfigürasyon dosyalarını test edin ve syntax hatalarını düzeltin.
Sonuç ve kapanış
systemctl status, sadece mevcut durumun özetini verir; ancak gerçek teşhis çoğunlukla ilgili loglar ve bağımlılık zincirinin incelenmesiyle netleşir. Servisin davranışını güvenilir biçimde anlamak için status ile journalctl çıktısını birlikte yorumlamak en etkili yaklaşımdır. Özellikle failed veya exit-code durumlarında, hatanın başlangıç adımı ve çıktı kodları üzerinden adım adım ilerlemek doğru teşhise götürür. Bu konudaki kendi tecrübelerinizle hangi durumlarda en çok hangi hatalarla karşılaştığınızı paylaşabilirsiniz.
