"Enter"a basıp içeriğe geçin

Systemctl Nedir ve Servis Yönetiminde Nasıl Kullanılır?

Linux sistemlerinde servis yönetimi ve başlangıç süreçlerinin kontrolü, uzun yıllar boyunca init, SysV ve Upstart gibi sistemlerle sağlanmaktaydı. Ancak bu sistemlerin yerine geliştirilen systemd, daha hızlı başlatma süreleri ve kapsamlı kaynak yönetimi sağlayan modern bir servis yöneticisi olarak öne çıkmaktadır. systemd, sistem açılışında devreye girerek servisleri sırayla başlatır, kaynak tüketimini yönetir ve arka plandaki işlemleri kontrol eder. Oturumlar, bağlama noktaları (mount), takas alanları (swap) ve hedef birimler gibi birçok öğeyi denetler. Bu işlemleri systemctl, journalctl, loginctl, cgls, cgtop ve nspawn gibi araçlarla gerçekleştirir. Ayrıca, CPU kullanımının etkin izlenmesi için Prometheus ve Grafana gibi sistem gözlemleme araçlarıyla entegre şekilde çalışabilir. systemd’nin bağımlılıklara dayalı servis başlatma düzeni, sistemin kararlılığını artırır.

Linux’ta Daemon Süreçleri

Linux sistemlerinde daemon’lar, sistem açıldığında otomatik olarak başlatılan ve kullanıcı müdahalesi olmadan arka planda çalışan servis süreçleridir. Örneğin, sshd servisi uzak bağlantılara izin verir ve sistem çalıştığı sürece arka planda aktif kalır. Genellikle adlarının sonunda “d” harfi bulunur (örneğin: httpd, sshd, systemd) ve bu, onların daemon yani arka plan servisi olduğunu gösterir.

Daemon: Kullanıcıdan bağımsız olarak arka planda çalışan servis süreçleridir.
Socket: Yerel veya ağ üzerinden gelen bağlantıları dinleyen iletişim uç noktalarıdır.
Service: Genellikle bir veya daha fazla daemon tarafından sağlanan sistem hizmetlerini ifade eder.

Unix geleneğinden gelen Linux sistemlerinde, çekirdek yüklendikten sonra ilk çalışan süreç init olurdu. Bu süreç sistemin başlangıç seviyesini belirlemek için /etc/inittab dosyasını okur ve PID 1 olarak başlatılır. Hangi seviyede (runlevel) başlatılacağını aşağıdaki numaralara göre belirler:

  • 0 – Halt: Sistemin kapanması
  • 1 – Single User Mode: Tek kullanıcı kurtarma modu
  • 2, 3 – Multiuser Mode: Ağ bağlantısı olmadan (2) veya ağ destekli (3) çoklu kullanıcı modu
  • 5 – X11 Mode: Grafik arayüzlü başlatma (X11)
  • 6 – Reboot: Sistemin yeniden başlatılması

Günümüzde bu yapıların yerini büyük oranda systemd almış olsa da, klasik runlevel mantığı hâlen bazı sistemlerde kullanılmakta ve sistemin açılış davranışlarını anlamak için önem taşımaktadır.

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