Uncategorized

Systemctl ile Servis Başlatma, Durdurma ve İzleme

Eskiden Linux sistemlerinde servis kontrolü init, SysVinit veya Upstart ile sağlanırdı. Zamanla bu yapıların yerini daha gelişmiş ve kapsamlı bir çözüm olan systemd almıştır. systemd, sistem açılışında devreye girerek servislerin, mount noktalarının, swap alanlarının ve oturumların yönetimini üstlenir. Hızlı başlangıç süresi sunmasının yanı sıra servisler arası bağımlılıkları gözeterek doğru başlatma sırasını takip eder.

systemd, systemctl, journalctl, loginctl, nspawn, cgtop ve cgls gibi araçlarla kapsamlı yönetim imkânı sunar. Bu bütünleşik yapı, hem sistem yöneticilerinin işini kolaylaştırır hem de sistem performansını artırır. Özellikle Linux sistem logları, journalctl ile ayrıntılı şekilde analiz edilebilirken; arka planda çalışan servisleri izlemek veya uzun süren işlemleri kesintisiz yönetmek için Linux screen aracı oldukça işlevseldir. Bu bileşenlerin birlikte kullanımı, kararlı ve izlenebilir bir sunucu altyapısı sağlar.

Daemon, Socket ve Runlevel Nedir?

Daemon süreçleri, Linux sistemlerinin arka plan servisleridir. Bunlar, sistem önyükleme sırasında devreye girer ve kullanıcıdan bağımsız olarak işlem yapar. Örneğin sshd, uzaktan erişim sağlamak için sürekli çalışır. Genellikle isimleri d ile biter ve terminalde görünmeden arka planda hizmet sunar.

Sistem yapısında:

  • Daemon: Sessizce çalışan servis işlemleri
  • Socket: Bağlantı noktalarını dinleyen yapı
  • Service: Bir veya birden fazla daemon’un sunduğu hizmet bütünü

Eski init tabanlı Linux sistemlerinde, çekirdek yüklendikten sonra init süreci başlar (PID 1) ve sistemin çalıştırılacağı runlevel bilgisini /etc/inittab dosyasından okur:

  • 0: Sistemi durdur
  • 1: Kurtarma modu
  • 2-3: Çok kullanıcı, metin arayüzlü
  • 5: Grafik mod
  • 6: Yeniden başlat

systemd Unit Dosyaları ve Türleri

Systemd yapısı, “unit” olarak adlandırılan dosyalar aracılığıyla yapılandırılır. Her unit dosyası bir servis, mount noktası, hedef, zamanlayıcı ya da benzeri bir öğeyi tanımlar. Bu dosyalar genellikle /etc/systemd/system/ ya da /lib/systemd/system/ dizinlerinde yer alır.

En yaygın unit türleri şunlardır:

.service → Servisleri tanımlar

.socket → Socket’ler için yapılandırma içerir

.target → Birden çok servisin gruplandığı hedeflerdir

.mount → Disk bölümlerinin bağlanmasını tanımlar

.swap → Takas alanlarını yönetir

systemctl Komutları

Servisleri Başlatma ve Durdurma

Bir servisi başlatmak için start komutu kullanılır. Komut, sistemde değişiklik yapacağından sudo ile çalıştırılmalıdır.

sudo systemctl start application.service

Çalışmakta olan bir servisi durdurmak için stop komutu kullanılır:

sudo systemctl stop application.service

Servisi yeniden başlatmak için restart komutu verilir:

sudo systemctl restart application.service

systemctl Tüm Hizmetleri Listeleme

Sistemde şu anda çalışan ve yüklenmiş servisleri görmek için aşağıdaki komut kullanılabilir:

systemctl list-units

systemctl ile Etkin Olmayan Hizmetleri Listeleme

Eğer sadece çalışmayan (durdurulmuş) servisleri görmek istiyorsanız, aşağıdaki komutu kullanabilirsiniz:

sudo systemctl list-units --type=service --state=inactive

systemctl ile Etkinleştirilmiş Hizmetleri Listeleme

Sistemde önyükleme sırasında otomatik olarak başlayan servisleri görmek için:

sudo systemctl list-unit-files --type=service --state=enabled

Klasik service ve chkconfig Komutlarına Alternatifler

systemctl list-units --type=service --state=active

Evet, systemctl komutları .service uzantısını otomatik olarak varsayar. Ancak netlik ve uyumluluk açısından uzantıyı yazmanız önerilir.

systemctl get-default
sudo systemctl enable servis_adi

Eski sistemler sıralı çalışırken, systemd servisleri paralel başlatabilir, bağımlılık yönetimi yapabilir ve servis durumlarını daha etkili şekilde izleyebilir. Ayrıca journalctl ile birleşik bir günlükleme sistemi sunar.

Ubuntu, Debian, Fedora, CentOS, RHEL, SUSE, Arch Linux gibi birçok modern Linux dağıtımı artık varsayılan olarak systemd ile gelir.

Bir servis yapılandırma hatası, bağımlı servis eksikliği veya kaynak erişim problemi nedeniyle failed olabilir. Durumu görmek için:

systemctl status servis_adi

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir