Linux Systemd ve Servis Yönetimi Rehberi

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...

Linux
Linux Systemd ve Servis Yönetimi Rehberi

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

Celil Uyanikoglu

Yazan Celil Uyanikoglu

25 yıldır bilgi işlem piyasasında farklı dallarda uzmanlaşan bir Bilgisayar Mühendisi

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar