Systemd Servis Yönetimi: start, stop, enable Rehberi
Systemctl komutları, servis unit dosyaları, özel servis oluşturma, journalctl ile log takibi ve systemd sorun giderme rehberi. Linux sunucularda servis yönetimini öğrenin.
İçindekiler
Systemd Servis Yönetimi: start, stop, enable Rehberi
Systemd, modern Linux dağıtımlarının büyük çoğunluğunda kullanılan init sistemi ve servis yöneticisidir. Ubuntu, Debian, CentOS, AlmaLinux ve RHEL gibi dağıtımlarda systemd, sistem başlangıcından servis yönetimine kadar pek çok görevi üstlenir. Bu rehberde systemctl komutlarını, unit dosyalarını ve özel servis oluşturmayı öğreneceksiniz.
Systemd Nedir?
Systemd, Linux çekirdeği başladıktan sonra devreye giren ilk süreçtir (PID 1). Görevleri şunlardır:
- Sistem servislerini başlatmak ve durdurmak
- Servisler arasındaki bağımlılıkları yönetmek
- Sistem loglarını toplamak (journald)
- Sistem durumunu izlemek
Systemd, eski SysV init sisteminin yerini almıştır. /etc/init.d/ betikleri hâlâ çalışsa da artık systemd unit dosyaları tercih edilmektedir.
Temel systemctl Komutları
Servis Durumu Kontrolü
# Servis durumunu görüntüle
sudo systemctl status nginx
# Servisin çalışıp çalışmadığını kontrol et
sudo systemctl is-active nginx
# Servisin etkin (enabled) olup olmadığını kontrol et
sudo systemctl is-enabled nginx
# Tüm çalışan servisleri listele
sudo systemctl list-units --type=service --state=running
# Başarısız servisleri listele
sudo systemctl list-units --type=service --state=failed
Servis Başlatma ve Durdurma
# Servisi başlat
sudo systemctl start nginx
# Servisi durdur
sudo systemctl stop nginx
# Servisi yeniden başlat (durdur + başlat)
sudo systemctl restart nginx
# Servisi yeniden yükle (yapılandırmayı yenile, durdurmadan)
sudo systemctl reload nginx
# Mümkünse reload, değilse restart yap
sudo systemctl reload-or-restart nginx
Servis Etkinleştirme ve Devre Dışı Bırakma
# Servisi sistem başlangıcında otomatik başlat
sudo systemctl enable nginx
# Servisi başlat ve otomatik başlatmayı etkinleştir
sudo systemctl enable --now nginx
# Otomatik başlatmayı devre dışı bırak
sudo systemctl disable nginx
# Servisi durdur ve devre dışı bırak
sudo systemctl disable --now nginx
# Servisi tamamen maskele (başlatılamaz hale getir)
sudo systemctl mask nginx
# Maskelemeyi kaldır
sudo systemctl unmask nginx
Systemd Unit Dosyaları
Unit dosyaları, systemd'nin servisleri nasıl yöneteceğini tanımlar. İki ana konum vardır:
/lib/systemd/system/— Paket yöneticisi tarafından kurulan unit dosyaları/etc/systemd/system/— Sistem yöneticisi tarafından oluşturulan/özelleştirilen unit dosyaları
# Bir servisin unit dosyasını görüntüle
sudo systemctl cat nginx
# Unit dosyasının konumunu bul
sudo systemctl show nginx --property=FragmentPath
# Tüm unit dosyalarını listele
sudo systemctl list-unit-files --type=service
Unit Dosyası Yapısı
Bir .service unit dosyası üç ana bölümden oluşur:
[Unit]
Description=Nginx HTTP Server
After=network.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit] Bölümü:
Description: Servis açıklamasıAfter: Bu servis hangi servislerden sonra başlamalıRequires: Zorunlu bağımlılıklarWants: İsteğe bağlı bağımlılıklar
[Service] Bölümü:
Type: Servis tipi (simple, forking, oneshot, notify, dbus)ExecStart: Servisi başlatan komutExecStop: Servisi durduran komutRestart: Yeniden başlatma politikasıUser/Group: Servisi çalıştıracak kullanıcı
[Install] Bölümü:
WantedBy: Hangi target'a bağlı olduğu
Özel Servis Oluşturma
Kendi uygulamanız için bir systemd servisi oluşturmak oldukça basittir.
Örnek: Node.js Uygulaması için Servis
# Unit dosyasını oluştur
sudo nano /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/app.js
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
# Systemd'yi yeni unit dosyasından haberdar et
sudo systemctl daemon-reload
# Servisi başlat ve etkinleştir
sudo systemctl enable --now myapp
# Durumu kontrol et
sudo systemctl status myapp
Örnek: Python Script için Servis
[Unit]
Description=My Python Script
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/myscript
ExecStart=/usr/bin/python3 /home/ubuntu/myscript/main.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Servis Tiplerini Anlamak
| Tip | Açıklama | Kullanım Alanı |
|---|---|---|
simple | Ana süreç doğrudan çalışır | Node.js, Python |
forking | Ana süreç fork eder ve çıkar | Nginx, Apache |
oneshot | Tek seferlik görev | Başlangıç scriptleri |
notify | Hazır olduğunda bildirim gönderir | Systemd-aware uygulamalar |
Journalctl ile Log Yönetimi
Systemd'nin log sistemi journald, tüm servis loglarını merkezi olarak toplar.
# Tüm logları görüntüle
sudo journalctl
# Belirli bir servisin loglarını görüntüle
sudo journalctl -u nginx
# Son 50 satırı görüntüle
sudo journalctl -u nginx -n 50
# Gerçek zamanlı log takibi
sudo journalctl -u nginx -f
# Son 1 saatin logları
sudo journalctl -u nginx --since "1 hour ago"
# Belirli tarih aralığı
sudo journalctl -u nginx --since "2024-01-01" --until "2024-01-02"
# Sadece hata logları
sudo journalctl -u nginx -p err
# Boot logları
sudo journalctl -b
# Önceki boot'un logları
sudo journalctl -b -1
# Log boyutunu kontrol et
sudo journalctl --disk-usage
# Eski logları temizle (2 haftadan eski)
sudo journalctl --vacuum-time=2weeks
Systemd Target'ları
Target'lar, birden fazla servisi gruplandıran özel unit dosyalarıdır.
# Mevcut target'ı görüntüle
sudo systemctl get-default
# Target'ı değiştir
sudo systemctl set-default multi-user.target
# Mevcut oturumu değiştir (reboot gerektirmez)
sudo systemctl isolate rescue.target
# Yaygın target'lar
# poweroff.target — Sistemi kapat
# rescue.target — Tek kullanıcı modu
# multi-user.target — Çok kullanıcılı, ağ aktif
# graphical.target — Masaüstü ortamı
Sorun Giderme
Servis Başlamıyor
# Detaylı durum bilgisi
sudo systemctl status myapp -l
# Son logları incele
sudo journalctl -u myapp -n 100 --no-pager
# Unit dosyasını doğrula
sudo systemd-analyze verify /etc/systemd/system/myapp.service
# Bağımlılık sorunlarını kontrol et
sudo systemctl list-dependencies myapp
Daemon-reload Unutuldu
# Unit dosyasını değiştirdikten sonra mutlaka çalıştırın
sudo systemctl daemon-reload
Servis Sürekli Yeniden Başlıyor
# Restart politikasını kontrol et
sudo systemctl show myapp --property=Restart
# Restart sayacını sıfırla
sudo systemctl reset-failed myapp
Bir servisi geliştirirken önce Type=simple ve Restart=on-failure ile başlayın. Servis kararlı hale geldikten sonra diğer ayarları optimize edin.
Systemd Timer'ları (Cron Alternatifi)
Systemd timer'ları, cron job'larına modern bir alternatif sunar.
# Timer unit dosyası oluştur
sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
# Timer'ı etkinleştir
sudo systemctl enable --now backup.timer
# Tüm timer'ları listele
sudo systemctl list-timers
Sonuç
Systemd, modern Linux sunucu yönetiminin temel taşıdır. Systemctl komutlarını ve unit dosyası yapısını öğrenmek, sunucunuzdaki servisleri güvenilir şekilde yönetmenizi sağlar. REXE sunucularında özel servisler oluşturarak uygulamalarınızın sistem yeniden başlatmalarında otomatik olarak devreye girmesini sağlayabilirsiniz.
İlgili Makaleler
VDS Sunucuya SSH ile Bağlanma Rehberi (PuTTY & Terminal)
Linux VDS sunucunuza SSH ile bağlanma adımları: PuTTY, Terminal, anahtar tabanlı kimlik doğrulama, Path Panel firewall kuralı ve güvenlik ipuçları.
Windows VDS'e RDP ile Bağlanma ve Güvenlik Rehberi
Windows Server VDS sunucunuza Uzak Masaüstü (RDP) ile bağlanma adımları, NLA güvenlik ayarları, Path Panel firewall kuralı ve sorun giderme rehberi.
VDS Sunucu İşletim Sistemi Değiştirme Rehberi (Reinstall)
REXE panel üzerinden VDS sunucunuzun işletim sistemini değiştirme adımları, yedekleme önerileri, desteklenen Linux ve Windows Server sürümleri.