Rehberler Uzun Okuma Linux

systemd ile servis kontrolü

Unit dosyaları, enable/start ve log izleme.

10 Mart 2026 19 dk okuma
Paylaş
X in

Giriş

systemd modern Linux dağıtımlarının init sistemidir ve PID 1 olarak çalışır. Servis yönetimi, bağımlılık çözümü, log toplama ve zamanlayıcıları tek çatı altında birleştirir.

SysV init script'lerinin yerini .service unit dosyaları almıştır. systemctl komutu servisleri başlatır, durdurur, etkinleştirir ve durum sorgular.

Bu rehberde unit dosyası anatomisi, [Install] bölümü, override mekanizması ve üretim best practice'lerini inceliyoruz.

Unit Dosyası Yapısı

[Unit] bölümü Description, After, Before, Requires, Wants tanımlar. [Service] ExecStart, Restart, User, Type içerir. [Install] WantedBy boot hedefini belirler.

Unit dosyaları /etc/systemd/system/ (admin) ve /usr/lib/systemd/system/ (paket) altında bulunur. systemctl edit ile drop-in override oluşturulur.

[Unit]
Description=My Application
After=network.target postgresql.service

[Service]
Type=simple
User=deploy
ExecStart=/opt/app/bin/start.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

Servis Yönetimi Komutları

systemctl start/stop/restart/reload servis adını yönetir. enable/disable boot'ta otomatik başlatmayı kontrol eder. status detaylı durum ve son log satırlarını gösterir.

daemon-reload unit dosyası değişikliğinden sonra zorunludur. list-units --type=service tüm servisleri listeler.

  • start: başlat
  • enable: boot'ta aç
  • reload: yapılandırma yenile
  • is-active: durum kontrol
sudo systemctl daemon-reload
sudo systemctl enable --now myapp.service
sudo systemctl status myapp.service
journalctl -u myapp.service -f

Bağımlılıklar ve Sıralama

After=postgresql.service postgresql başladıktan sonra bu servisi başlatır; Requires= başarısızlıkta bu servisi de durdurur. Wants= zayıf bağımlılıktır.

multi-user.target normal sunucu boot hedefidir. graphical.target masaüstü ortamı içerir.

[Unit]
Requires=network-online.target
After=network-online.target docker.service
Wants=redis.service

journalctl ile Log İzleme

systemd journal merkezi log deposudur. journalctl -u servis.service servis loglarını filtreler. -f canlı takip, --since '1 hour ago' zaman filtresi sağlar.

PersistentStorage=yes /etc/systemd/journald.conf ile reboot sonrası log saklanır.

journalctl -u nginx.service --since today
journalctl -p err -b
journalctl -u myapp -o json-pretty

Timer ve Socket Unit'leri

.timer unit cron alternatifidir; OnCalendar veya OnUnitActiveSec ile tetiklenir. .socket unit socket activation sağlar; istek gelince servis başlar.

systemctl list-timers --all aktif zamanlayıcıları gösterir.

ExecStart öncesi ortam değişkenleri Environment= veya EnvironmentFile= ile tanımlayın; shell export güvenilir değildir.

Üretim Best Practice

Restart=on-failure veya always ile otomatik kurtarma. LimitNOFILE dosya tanımlayıcı limiti. Security hardening: NoNewPrivileges, PrivateTmp.

Servisleri root yerine dedicated user ile çalıştırın. ExecStartPre migration veya hazırlık adımları için kullanılır.

  1. Dedicated kullanıcı
  2. Restart politikası
  3. journalctl izleme
  4. daemon-reload unutmayın
  5. Override ile minimal değişiklik

Sonuç

systemd servis yönetimini öğrenmek modern Linux operasyonunun temelidir. Unit dosyalarını versiyon kontrolünde tutun ve infrastructure-as-code ile dağıtın.

journalctl ile logları merkezi izleyin; timer ile cron görevlerini modernleştirin.