Systemd ile Sistem ve Servis Yönetimi (systemctl)

systemd

Merhabalar

Bu yazıda Linux tabanlı işletim sistemlerinde servisleri yönetilmenize olanak sağlayan systemctl komutunun detaylarına değineceğim. En basit tanımıyla systemd linux kerneli için sistem ve servis yöneticisidir. Systemd linux tabanlı işletim sistemleri için geliştirilmiştir ve birçok linux dağıtımı (centos, red hat, debian, oracle) systemd kullanmaya başladılar. Systemd ‘nin amacı ise sistemdeki servislerin çalışmasını organize etmektir. Bu yönetimi ise systemctl, journalctl, notify, analyze, loginctl, nspawn vb.. araçlar sayesinde gerçekleştirilir.

Basit örnekler halinde başlamak gerekirse, aşağıdaki gibi bir komut kullanarak bir servisi durdurabilirsiniz. Bu örnekte ssh servisi yer almaktadır.

root# systemctl stop sshd 

veya bir servisi başlatmak isterseniz aşağıdaki komutu kullanabilirsiniz.

root# systemctl start sshd 

Bir servisi restart etmek isterseniz aşağıdaki komutu kullanabilirsiniz.

root# systemctl restart sshd 

Bir servis hakkında detaylı durum bilgisini listelemek isterseniz aşağıdaki komut kullanılabilir.

root# systemctl status sshd
 
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since Thu 2015-08-27 08:06:51 PDT; 6s ago
 Main PID: 8481 (sshd)
   CGroup: /system.slice/sshd.service
           └─8481 /usr/sbin/sshd -D
Aug 27 08:06:51 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
Aug 27 08:06:51 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
Aug 27 08:06:51 localhost.localdomain sshd[8481]: Server listening on 0.0.0.0 port 22.
Aug 27 08:06:51 localhost.localdomain sshd[8481]: Server listening on :: port 22.
 

Bir servisi devre dışı bırakmak isterseniz aşağıdaki komut kullanılabilir.

root# systemctl disable sshd 

aynı şekilde servisi devreye almak isterseniz aşağıdaki komut kullanılabilir.

root# systemctl enable sshd 

Bir işletim sistemini yeniden başlatmanın birçok yöntem bulunmaktadır. Bu yöntemlerden birisi ise systemctl komutudur. Aşağıdaki komutu kullanarak sistemi yeniden başlatabilirsiniz.

root# systemctl reboot
root# reboot
root# init 6 

Sistemi tamamen kapatmak için yine birçok yöntem bulunmaktadır. Aşağıdaki komutlardan birisini kullanabilirsiniz.

root# systemctl poweroff
root# shutdown -h now
root# poweroff
root# init 0 

Sistemi uyku moduna almak için aşağıdaki komut kullanılabilir.

root# systemctl suspend 

Sistemi derin uyku moduna almak için ise aşağıdaki komutu kullanabilirsiniz.

root# systemctl hibernate 

Systemd versiyon bilgilerini görmek isterseniz aşağıdaki komutu kullanabilirsiniz.

root# systemctl --version 

Bir servisin aktif olup olmadığını birçok yöntem veya komut ile görebilirsiniz. Aynı zamanda systemctl komutunu kullanarak ‘da görmeniz mümkün.

root# systemctl is-enabled sshd
 
enabled 

Bir servisi kesintiye uğratmadan yapılandırma dosyasını yeniden yüklemesini isterseniz aşağıdaki komut kullanılabilir.

root# systemctl reload sshd 

Sistemde devam eden işlerin listesini görmek isterseniz aşağıdaki komut kullanılabilir. Başka bir seçenek ise jobs komutudur.

root# systemctl list-jobs
 
No jobs running. 

aynı şekilde bir işi iptal etmek isterseniz işin ismini aşağıdaki gibi belirtebilirsiniz.

root# systemctl cancel JOB 

Bir süreci öldürmenin yine birçok yöntemi bulunmaktadır. Aynı zamanda systemctl komutu ile bunuda yapabilirsiniz. Aşağıdaki komutu kullanarak ssh sürecini öldürebilirsiniz.

root# systemctl kill sshd.service 

veya süreci öldürmek için bir sinyal belirtebilirsiniz.

root# systemctl kill -s SIGKILL sshd.service 

Systemctl komutun bir diğer harikulade özelliği ise uzaktaki bir sunucunun servisini görebilmenizi sağlıyor. Aşağıdaki komutu kullanarak uzak sunucunun ssh servisinin durumunu görebilirsiniz.

root# systemctl -H [email protected] status sshd.service 

Sistemde dinlenen soketleri görmek isterseniz aşağıdaki komut kullanılabilir.

root# systemctl list-sockets
 
LISTEN                          UNIT                         ACTIVATES
/dev/initctl                    systemd-initctl.socket       systemd-initctl.service
/dev/log                        systemd-journald.socket      systemd-journald.service
/run/dmeventd-client            dm-event.socket              dm-event.service
/run/dmeventd-server            dm-event.socket              dm-event.service
/run/lvm/lvmetad.socket         lvm2-lvmetad.socket          lvm2-lvmetad.service
/run/systemd/journal/socket     systemd-journald.socket      systemd-journald.service
/run/systemd/journal/stdout     systemd-journald.socket      systemd-journald.service
/run/systemd/shutdownd          systemd-shutdownd.socket     systemd-shutdownd.service
/run/udev/control               systemd-udevd-control.socket systemd-udevd.service
/var/run/avahi-daemon/socket    avahi-daemon.socket          avahi-daemon.service

Systemctl komutunun bir diğer güzel özelliği ise işlem bekleyen, yarım kalmış, başarısız olmuş servisleri aşağıdaki –fail parametresi ile görmenizi sağlar.

root# systemctl --fail

UNIT                     LOAD    ACTIVE   SUB            DESCRIPTION
bluetooth.target        loaded   active   active          Bluetooth

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type. 

Systemctl komutu ile yüklü olan tüm servisleri ve onlar hakkında durumlarını görmek isterseniz aşağıdaki komutu kullanabilirsiniz.

root# systemctl list-unit-files --type service
 
UNIT FILE                                   STATE   
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
auditd.service                              enabled
bluetooth.service                           enabled
brandbot.service                            static 
brltty.service                              disabled
canberra-system-bootup.service              disabled
canberra-system-shutdown-reboot.service     disabled
canberra-system-shutdown.service            disabled
chrony-wait.service                         disabled
chronyd.service                             enabled
colord.service

Aşağıdaki komutu kullanarak güncel sistem çalışma seviyelerini listeleyebilirsiniz. Aynı zamanda sistem çalışma seviyelerini systemctl ile değiştirmeniz mümkün. 

root# systemctl list-units --type target
 
UNIT                 LOAD   ACTIVE SUB    DESCRIPTION
basic.target         loaded active active Basic System
bluetooth.target     loaded active active Bluetooth
cryptsetup.target    loaded active active Encrypted Volumes
getty.target         loaded active active Login Prompts
graphical.target     loaded active active Graphical Interface
local-fs-pre.target  loaded active active Local File Systems (Pre)
local-fs.target      loaded active active Local File Systems
multi-user.target    loaded active active Multi-User System
network.target       loaded active active Network
paths.target         loaded active active Paths
remote-fs-pre.target loaded active active Remote File Systems (Pre)
remote-fs.target     loaded active active Remote File Systems
slices.target        loaded active active Slices
sockets.target       loaded active active Sockets
sound.target         loaded active active Sound Card
swap.target          loaded active active Swap
sysinit.target       loaded active active System Initialization
timers.target        loaded active active Timers  

Aşağıdaki komutu kullanarak sistem birimleri hakkında birçok bilgi alabilirsiniz.

root# systemctl list-units --all

UNIT                                            LOAD   ACTIVE   SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount               loaded active   waiting   Arbitrary Executable File Formats File System Au
dev-cdrom.device                                loaded active   plugged   VMware_Virtual_IDE_CDROM_Drive
dev-disk-by\x2d...e_00000000000000000001.device loaded active   plugged   VMware_Virtual_IDE_CDROM_Drive
dev-disk-by\x2d...e_10000000000000000001.device loaded active   plugged   VMware_Virtual_IDE_CDROM_Drive
dev-disk-by\x2d...2db1df\x2d7853c1983de3.device loaded active   plugged   VMware_Virtual_S
dev-disk-by\x2d...2da997\x2d9f53bb4f6a07.device loaded active   plugged   VMware_Virtual_S
dev-fd0.device                                  loaded active   plugged   /dev/fd0
dev-sda.device                                  loaded active   plugged   VMware_Virtual_S
dev-sda1.device                                 loaded active   plugged   VMware_Virtual_S
dev-sda2.device                                 loaded active   plugged   VMware_Virtual_S
dev-sda3.device                                 loaded active   plugged   VMware_Virtual_S
dev-sr0.device                                  loaded active   plugged   VMware_Virtual_IDE_CDROM_Drive
dev-sr1.device                                  loaded active   plugged   VMware_Virtual_IDE_CDROM_Drive
dev-ttyS0.device                                loaded active   plugged   /dev/ttyS0
dev-ttyS1.device                                loaded active   plugged   /dev/ttyS1
dev-ttyS2.device                                loaded active   plugged   /dev/ttyS2
dev-ttyS3.device                                loaded active   plugged   /dev/ttyS3

Aşağıdaki gibi bir komut kullanarak bir servise bağlı birimlerin belirli türlerini görebilirsiniz. Örneğin, mount servisine bağlı birimleri listelemek için,

root# systemctl list-units --type mount

UNIT                    LOAD   ACTIVE SUB     DESCRIPTION
-.mount                 loaded active mounted /
boot.mount              loaded active mounted /boot
dev-hugepages.mount     loaded active mounted Huge Pages File System
dev-mqueue.mount        loaded active mounted POSIX Message Queue File System
sys-kernel-config.mount loaded active mounted Configuration File System
sys-kernel-debug.mount  loaded active mounted Debug File System 

Bir işletim sisteminin çalışma seviyesini geçerli oturum için değiştirmek isterseniz aşağıdaki komutları kullanabilirsiniz.

poweroff.target  : Runlevel 0 değerine eşittir.

rescue.target : Single user mode değerine eşittir.

multi-user.target : Runlevel 2,3,4 değerine eşittir.

graphical.target : Runlevel 5 değerine eşittir.

reboot.target : Runlevel 6 değerine eşittir.

emergency.target : Acil durum moduna geçer.

hybrid-sleep.target : Hazırda bekleme ve askıya alma modu.

root# systemctl isolate poweroff.target
root# systemctl isolate rescue.target
root# systemctl isolate multi-user.target
root# systemctl isolate graphical.target
root# systemctl isolate reboot.target
root# systemctl isolate emergency.target
root# systemctl isolate hybrid-sleep.target
 

Örneğin, yukarıdaki herhangi bir çalışma seviyesini varsayılan olarak kullanmak isterseniz aşağıdaki komutu kullanabilirsiniz.

root# systemctl set-default multi-user.target 

Sistem varsayılan hangi açılış seviyesini kullandığını görmek isterseniz aşağıdaki komut kullanılabilir.

root# systemctl get-default
 
multi-user.target 

Bir servise bağlı bağımlılıkları görmek isterseniz aşağıdaki komutu kullanabilirsiniz.

root# systemctl list-dependencies sshd
 
sshd.service
├─sshd-keygen.service
├─system.slice
└─basic.target
  ├─firewalld.service
  ├─microcode.service
  ├─rhel-autorelabel-mark.service
  ├─rhel-autorelabel.service
  ├─rhel-configure.service
  ├─rhel-dmesg.service
  ├─rhel-loadmodules.service
  ├─paths.target
  ├─slices.target
  │ ├─-.slice  

Yukarıdaki komuta benzer bir komut ise aşağıdaki gibidir. Aşağıdaki komut kullanarak bir servise ait konfigurasyon dosyasının içeriğinin bir listesini görebilirsiniz. Bir başka seçenek ise konfigurasyon dosyalarını bulup cat komutu ile bakabilirsiniz. Bu yol daha basit gibi. 🙂

root# systemctl show sshd.service

Id=sshd.service
Names=sshd.service
Requires=basic.target
Wants=sshd-keygen.service system.slice
WantedBy=multi-user.target
ConsistsOf=sshd-keygen.service
Conflicts=shutdown.target
ConflictedBy=sshd.socket
Before=shutdown.target multi-user.target 
... 

Yukarıdaki çıktının içerisinden sadece bir kelimeyi görmek isterseniz o kelimenin ismini aşağıdaki gibi belirterek sadece belirttiğiniz kelimeyi aratabilirsiniz.

root# systemctl show sshd.service -p Id

Id=sshd.service

veya

root# systemctl show sshd.service | grep Id

Id=sshd.service

Daha fazla bilgi için man sayfasına bakabilirsiniz.

Tagged with: , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Archives