Reboot Sonrası Servis Başlatma Sorunları
Sunucu yeniden başlatma sonrası servis başlatma sorunlarını teşhis ve çözme: systemctl, failed services, boot log analizi ve systemd yapılandırması.
İçindekiler
Giriş
Sunucu yeniden başlatıldıktan sonra bazı servisler otomatik olarak başlamayabilir, bu da kesintilere ve hizmet aksamalarına neden olur. Bu rehberde, reboot sonrası servis başlatma sorunlarını teşhis etmeyi ve çözmeyi öğreneceksiniz.
Başarısız Servisleri Kontrol Etme
Başarısız Servisleri Listeleme
# Tüm başarısız servisleri listele
sudo systemctl list-units --type=service --state=failed
# Belirli bir servisin durumunu kontrol et
sudo systemctl status SERVIS_ADI
# Tüm servisleri ve durumlarını göster
sudo systemctl list-units --type=service --all
Boot Loglarını Okuma
# Mevcut boot loglarını görüntüle
journalctl -b
# Önceki boot loglarını görüntüle
journalctl -b -1
# Servise göre filtrele
journalctl -b -u SERVIS_ADI
# Sadece hataları göster
journalctl -b -p err
# Boot süresi analizi
systemd-analyze
# Servis başlatma sırası
systemd-analyze blame
# Kritik zincir
systemd-analyze critical-chain
systemd-analyze blame hangi servislerin başlatılmasının en uzun sürdüğünü gösterir. Bu, boot sürecindeki darboğazları belirlemeye yardımcı olur.
Servisleri Otomatik Başlatma İçin Etkinleştirme
Boot'ta Servis Etkinleştirme
# Servisi boot'ta başlatmak için etkinleştir
sudo systemctl enable SERVIS_ADI
# Etkinleştir ve hemen başlat
sudo systemctl enable --now SERVIS_ADI
# Servisin etkin olup olmadığını kontrol et
systemctl is-enabled SERVIS_ADI
# Tüm etkin servisleri listele
systemctl list-unit-files --type=service --state=enabled
Yaygın Etkinleştirilmesi Gereken Servisler
# SSH sunucusu
sudo systemctl enable ssh
# Nginx web sunucusu
sudo systemctl enable nginx
# Apache web sunucusu
sudo systemctl enable apache2
# MySQL/MariaDB
sudo systemctl enable mysql
# Docker
sudo systemctl enable docker
# Fail2Ban
sudo systemctl enable fail2ban
Servis Bağımlılıkları
Bağımlılıkları Anlama
# Servis bağımlılıklarını göster
systemctl list-dependencies SERVIS_ADI
# Ters bağımlılıkları göster
systemctl list-dependencies --reverse SERVIS_ADI
# Servis unit dosyasını göster
systemctl cat SERVIS_ADI
Unit Dosyalarında Bağımlılık Yapılandırma
# /etc/systemd/system/myapp.service
[Unit]
Description=Uygulama Servisi
After=network.target mysql.service
Requires=mysql.service
Wants=redis.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Önemli direktifler:
- After=: Bu birimlerden sonra başlat
- Requires=: Zorunlu bağımlılık (bağımlılık başarısız olursa başarısız olur)
- Wants=: Yumuşak bağımlılık (bağımlılık başarısız olsa da devam eder)
- Before=: Bu birimlerden önce başlat
Boot Sırası Analizi
# Tam boot süresi
systemd-analyze time
# Servis başlatma süreleri (sıralı)
systemd-analyze blame | head -20
# Kritik zincir görselleştirme
systemd-analyze critical-chain
# SVG boot grafiği oluşturma
systemd-analyze plot > boot-chart.svg
Boot süresi çok uzunsa, gereksiz servisleri sudo systemctl disable SERVIS_ADI ile devre dışı bırakmayı düşünün.
Özel Systemd Servisi Oluşturma
# Servis dosyası oluşturma
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=Özel Uygulama
After=network.target
[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start
ExecStop=/opt/myapp/bin/stop
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
# Systemd daemon'ı yeniden yükle
sudo systemctl daemon-reload
# Servisi etkinleştir ve başlat
sudo systemctl enable --now myapp
# Durumu kontrol et
sudo systemctl status myapp
Yaygın Sorunları Giderme
Servis Hata Kodu ile Başarısız Oluyor
# Detaylı hatayı kontrol et
journalctl -u SERVIS_ADI -n 50 --no-pager
# Servis yapılandırmasını kontrol et
systemctl cat SERVIS_ADI
# Binary'nin var olduğunu ve çalıştırılabilir olduğunu doğrula
ls -la /path/to/binary
Servis Çok Erken Başlıyor
# Ağ bağımlılığı ekle
[Unit]
After=network-online.target
Wants=network-online.target
# network-online target'ı etkinleştir
sudo systemctl enable systemd-networkd-wait-online
Servis Sürekli Yeniden Başlıyor
# Yeniden başlatma sayısını kontrol et
systemctl show SERVIS_ADI -p NRestarts
# Son logları görüntüle
journalctl -u SERVIS_ADI --since "5 minutes ago"
# Yeniden başlatma döngüsünü geçici olarak durdur
sudo systemctl stop SERVIS_ADI
sudo systemctl reset-failed SERVIS_ADI
rc.local Alternatifi
Basit başlatma komutları için rc.local yerine systemd servisi oluşturun:
# /etc/systemd/system/rc-local.service
[Unit]
Description=RC Local Uyumluluğu
After=network.target
[Service]
Type=oneshot
ExecStart=/etc/rc.local
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
# rc.local'ı çalıştırılabilir yap
sudo chmod +x /etc/rc.local
# Servisi etkinleştir
sudo systemctl enable rc-local
Sonuç
Reboot sonrası servis başlatma sorunları yaygın ama kolayca önlenebilir. Kritik servislerin systemctl enable ile etkinleştirildiğinden emin olun, unit dosyalarında doğru bağımlılıkları yapılandırın ve düzenli olarak boot loglarını hatalara karşı kontrol edin.
İlgili Makaleler
SSH Bağlantı Sorunu: Sunucuya Bağlanamıyorum
SSH bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, SSH portu için filtre kuralı oluşturma ve sorun giderme adımları.
RDP Bağlantı Sorunu: Windows Sunucuya Erişilemiyor
RDP bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, RDP portu için filtre kuralı oluşturma ve sorun giderme adımları.
MTR Testi Nasıl Yapılır ve Destek Ekibine Gönderilir
WinMTR ve Linux MTR ile ağ testi yapma, ICMP filtre kuralı oluşturma ve sonuçları destek ekibine gönderme rehberi. Paket kaybı ve gecikme analizi.