Systemctl ile Systemd Servislerini Yönetmek

Bir ilklendirme sisteminin (init system) amacı Linux kerneli ayağa kalktıktan (boot ettikten) sonra başlatılması gereken bileşenleri ilklendirmektir. İlklendirme sistemi, sistem başladıktan sonra herhangi br zamanda servisleri ve arka planda çalışan programları (daemon) kontrol etmek için de kullanılır.

systemd Linux dağıtımları arasında hızla yaygınlaşan bir ilklendirme sistemi ve sistem yöneticisidir. Ubuntu da 16.04 versiyonunda eskiden kullandığı Upstart’ı systemd ile değiştirdi. systemctl komutu ise systemd’yi kontrol etmeye yarayan temel komuttur.

Ayağa kalkma sürecini incelemek

systemd-analyze komutu ayağa kalkma (boot) sürecini incelemeye yarar. Ne kadar sürdü, hangi servis ne kadar zamanda ayağa kalktı…

Ayağa kalkma süreciyle ilgili genel bilgi almak için:

$ systemd-analyze

Hangi sürecin ne kadar zaman aldığını öğrenmek için:

$ systemd-analyze blame

Birimleri İncelemek

systemd’nin yönettiği “birimler” (unit): servisler, cihazlar (devices), bağlama noktaları (mount points) veya soketler olabilir. systemctl komutuyla bunların hepsi yönetilebilir.

Çalışan bütün birimleri görüntülemek için:

$ systemctl list-units

Çalışan servisleri görüntülemek için:

$ systemctl list-units --type=service

Hata alan birimleri görüntülemek için:

$ systemctl --failed

Bütün birim dosyalarını görüntülemek için:

$ systemctl list-unit-files

systemctl kullanırken genellikle bir birimin tam adını uzantısıyla birlikte vermek gerekir, örneğin sshd.socket gibi. Ama kısa yazımla ilgili bilinmesi gereken birkaç kural var:

  • bir birimin uzantısını yazılmazsa, systemctl bunun .service olduğunu varsayar. Örneğin, netctl ve netctl.service eşdeğerdir.
  • bağlama noktaları otomatik olarak ilgili .mount birimine çevrilir. Örneğin /home ile home.mount eşdeğerdir.
  • cihazlar otomatik olarak ilgili .device birimine çevrilir. Örneğin /dev/sda2 ile dev-sda2.device eşdeğerdir.

Birimleri Yönetmek

Bir birimi hemen başlatmak için:

$ systemctl start unit

Bir birimi hemen durdurmak için:

$ systemctl stop unit

Bir birimi yeniden başlatmak için:

$ systemctl restart unit

Bir birimin ayarlarını yeniden yüklemek için için:

$ systemctl reload unit

 

Bir birimin çalışıp çalışmadığını öğrenmek için:

$ systemctl status unit

Bir birimin etkinleştirilmiş olup olmadığını, yani bilgisayar ayağa kalkarken çalıştırılıp çalıştırılmayacağını öğrenmek için:

$ systemctl enable unit

Bir birimi etkinleştirmek için:

$ systemctl enable unit
Bir birimi etkisizleştirmek için:
$ systemctl disable unit

Bir birimin çalıştırılmasını engellemek için maskeleyebilirsiniz:

$ systemctl mask unit

Ve maskeyi kaldırmak için:

$ systemctl unmask unit

Güç Yönetimi

Sitemi kapatıp tekrar başlatmak için

$ systemctl reboot

Sistemi kapatıp, gücü kesmek için:

$ systemctl poweroff

Sistemi askıya almak için:

$ systemctl suspend

Sistemi uyutmak için:

$ systemctl hibernate

 

Birim Dosyaları

Yüklenen paketlerden gelen birim dosyaları /usr/lib/systemd/system/ klasöründe; sistem yöneticisi tarafından yüklenen birim dosyaları da /etc/systemd/system/ klasöründe bulunur.

Birim dosyaları ile hangi birimin hangi birim(ler)e bağlı olduğu ayarlanabilir. Örneğin B biriminin A birimi başlatılmadan önce çalışıyor olması gerekiyorsa; A’nın birim dosyasındaki [Unit] bölümüne Requires=B ve After=B satırlarını eklemek gerekir. Eüer bu ihtiyaç zorunlu değil, tercihe bağlıysa; Wants=B ve After=B satırlarını eklemek gerek. Wants ve Requires komutları After komutunu gerektirmez. Eğer After komutu olmazsa iki birim paralelde başlayılacaktır.

 

Daha ayrıntılı bilgi için: systemd.