Systemd, modern Linux dağıtımlarının kalbidir. Sistem açılışından servislerin yönetimine kadar her şeyi kontrol eder. Eski SysV init'in yerini alan systemd, paralel başlatma, bağımlılık yönetimi ve gelişmiş izleme özellikleri sunar. Systemd Nedir?
Systemd, Linux için sistem ve servis yöneticisidir. PID 1 olarak çalışır - sistemde başlayan ilk süreçtir. Görevleri:
- Sistemin açılışını yönetme
- Servisleri başlatma ve durdurma
- Bağımlılıkları çözme
- Log toplama (journald)
- Zamanlı görevler (timer)
- Ağ yapılandırması (networkd)
Unit Kavramı
Systemd'de her şey "unit" olarak adlandırılır. Farklı türleri vardır:
.service: Servisler (nginx, mysql, ssh) .socket: Ağ soketleri .timer: Zamanlanmış görevler .mount: Dosya sistemi bağlama noktaları .target: Unit grupları (multi-user.target) .device: Donanım aygıtları
En çok .service unit'leriyle çalışırsınız.
systemctl Temelleri
systemctl, systemd'yi kontrol eden ana komuttur.
Servis Durumu
sudo systemctl status nginx
Çıktıda servsin aktif mi, ne zaman başladığı, PID'si ve son log satırları görünür.
Servis Başlatma ve Durdurma
sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl restart nginx
Yapılandırma değişikliği sonrası (tam yeniden başlatma olmadan):
sudo systemctl reload nginx
Reload desteklemiyorsa:
sudo systemctl reload-or-restart nginx
Servisi Etkinleştirme
Açılışta otomatik başlaması için:
sudo systemctl enable nginx
Etkinleştir ve hemen başlat:
sudo systemctl enable --now nginx
Otomatik başlatmayı kapat:
sudo systemctl disable nginx
Servis Listesi
Tüm servisleri listele:
systemctl list-units --type=service
Aktif servisleri:
systemctl list-units --type=service --state=running
Etkinleştirilmiş servisleri:
systemctl list-unit-files --type=service --state=enabled
Başarısız servisleri:
systemctl --failed
Servis Durumu Kontrolleri
Servis çalışıyor mu:
systemctl is-active nginx
Etkin mi (açılışta başlar mı):
systemctl is-enabled nginx
Script'lerde kullanım:
if systemctl is-active --quiet nginx; then echo "Nginx çalışıyor" fi
Unit Dosyaları
Unit dosyaları servisin nasıl çalışacağını tanımlar.
Dosya Konumları
/lib/systemd/system/: Paket yöneticisinin yüklediği dosyalar /etc/systemd/system/: Özel yapılandırmalar (öncelikli) /run/systemd/system/: Çalışma zamanı (geçici)
Dosya yapısını görme:
systemctl cat nginx
Dosya yolunu bulma:
systemctl show nginx -p FragmentPath
Basit Service Dosyası
Kendi servisinizi oluşturmak için /etc/systemd/system/myapp.service:
[Unit] Description=My Application After=network.target
[Service] Type=simple User=myuser WorkingDirectory=/opt/myapp ExecStart=/opt/myapp/start.sh Restart=on-failure RestartSec=5
[Install] WantedBy=multi-user.target
Bölümler
[Unit]: Açıklama ve bağımlılıklar
- Description: Servis açıklaması
- After: Bu unit'lerden sonra başla
- Requires: Zorunlu bağımlılıklar
- Wants: Opsiyonel bağımlılıklar
[Service]: Çalışma parametreleri
- Type: simple, forking, oneshot, notify
- User/Group: Çalışacağı kullanıcı
- WorkingDirectory: Çalışma dizini
- ExecStart: Başlatma komutu
- ExecStop: Durdurma komutu
- ExecReload: Reload komutu
- Restart: Yeniden başlatma politikası
- RestartSec: Restart bekleme süresi
[Install]: Etkinleştirme ayarları - WantedBy: Hangi target'a bağlı
Type Seçenekleri
simple: Varsayılan. ExecStart süreci ana süreçtir. forking: Süreç kendini fork'lar (eski daemon'lar). oneshot: Bir kez çalışır ve biter. notify: Hazır olduğunda systemd'ye bildirir.
Restart Politikaları
no: Yeniden başlatma on-failure: Hatalı çıkışta yeniden başlat always: Her zaman yeniden başlat on-abnormal: Sinyal veya timeout'ta yeniden başlat
Daemon-reload
Unit dosyası oluşturduktan veya değiştirdikten sonra:
sudo systemctl daemon-reload
Bu kritiktir - yapmadan servis düzgün çalışmaz.
Node.js Uygulama Örneği
/etc/systemd/system/nodeapp.service:
[Unit] Description=Node.js Application After=network.target
[Service] Type=simple User=nodeapp WorkingDirectory=/var/www/nodeapp ExecStart=/usr/bin/node /var/www/nodeapp/server.js Restart=always RestartSec=10 Environment=NODE_ENV=production Environment=PORT=3000
[Install] WantedBy=multi-user.target
Etkinleştirme:
sudo systemctl daemon-reload sudo systemctl enable --now nodeapp sudo systemctl status nodeapp
Unit Dosyalarını Düzenleme
Paket tarafından sağlanan dosyaları doğrudan düzenlemeyin. Override kullanın:
sudo systemctl edit nginx
Bu /etc/systemd/system/nginx.service.d/override.conf dosyası oluşturur.
Örnek override:
[Service] TimeoutStartSec=90 LimitNOFILE=65536
Tam dosyayı düzenlemek için:
sudo systemctl edit --full nginx
Masking
Bir servisi tamamen engellemek için:
sudo systemctl mask nginx
Mask kaldırma:
sudo systemctl unmask nginx
Mask, unit dosyasını /dev/null'a bağlar. enable veya start çalışmaz.
Journalctl ile Log İzleme
Systemd logları journald tarafından toplanır.
Temel Kullanım
Servis logları:
journalctl -u nginx
Son 50 satır:
journalctl -u nginx -n 50
Canlı takip:
journalctl -u nginx -f
Bugünkü loglar:
journalctl -u nginx --since today
Hata logları:
journalctl -u nginx -p err
Sistem geneli:
journalctl -b # Bu boot journalctl -b -1 # Önceki boot
Targets (Çalışma Seviyeleri)
Target'lar, eski runlevel'lerin karşılığıdır.
Yaygın target'lar:
- poweroff.target: Sistem kapatma
- rescue.target: Tek kullanıcı mod
- multi-user.target: Çok kullanıcılı (GUI yok)
- graphical.target: GUI ile
Mevcut target:
systemctl get-default
Varsayılan target ayarlama:
sudo systemctl set-default multi-user.target
Target'a geçiş:
sudo systemctl isolate rescue.target
Timer'lar (Cron Alternatifi)
Systemd timer'ları cron işlerinin yerini alabilir.
Örnek timer (/etc/systemd/system/backup.timer):
[Unit] Description=Daily Backup Timer
[Timer] OnCalendar=daily Persistent=true
[Install] WantedBy=timers.target
İlişkili servis (/etc/systemd/system/backup.service):
[Unit] Description=Backup Service
[Service] Type=oneshot ExecStart=/usr/local/bin/backup.sh
Etkinleştirme:
sudo systemctl enable --now backup.timer
Timer listesi:
systemctl list-timers
Sorun Giderme
Servis başlamıyor:
# Durumu kontrol systemctl status servis
# Detaylı loglar journalctl -u servis -n 100
# Unit dosyası syntax kontrolü systemd-analyze verify /etc/systemd/system/servis.service
Bağımlılık kontrolü:
systemctl list-dependencies nginx
Boot analizi:
systemd-analyze systemd-analyze blame
Henüz yorum yok.
Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.