12 Şubat 2017 Pazar

Linux sistemlerde systemd ile servislerin yönetimi


systemd : Görevi bilgisayardaki sistem ve servislerin çalışmasını organize etmektir. Init sisteminin yetersiz kalması sonucu geliştirilmektedir.

Linux sistemin açılışı


Klasik linux açılışı
  • init yapısı – Sıralama zorunluluğu
  • Bir servis başlamadan, ona ihtiyaç duyan sıradaki servis başlatılmaz.
  • -Birbirine bağlı servisler, soketler ile iletişim

systemd açılışı

Systemd, tüm hizmet ve servislerin ihtiyaç duyduğu bağlanma
noktalarını, ilgili hizmet başlamasa dahi önceden başlatır ve diğer
bekleyen programların sırada beklemesini ortadan kaldırır. Bu şekilde systemd birbirine bağlı servisleri birbirlerine ihtiyaç duymadan başlatır.

Debian, Oracle, RHEL, Suse gibi linux dağıtımları eski SystemV yerine default olarak systemd kullanmaya başladılar. Systemd, yalnızca açılış servislerinin düzenlenmesini üstlenen init sistemine göre daha karmaşık, servisleri paralel olarak çalıştırabilme, automount, journal, system state snapshot desteği gibi bir çok özellik barındırmaktadır.

Unit Files

Unit file default olarak "/etc/systemd/system/" dizini altında bulunur. Bu dizinlerde birbirinden farklı uzanntılara sahip bir çok dosya vardır. Bu uzantılar birbirinden farklı unit tiplerini gösterir. .service uzantısına sahip dosyalar servislere ait unit dosyaları tutar. .target uzantılı dosyalar site bir çok service unit'nin gruplanmış halini gösterir. .mount uzantılı dosyalar sisteme mount edilmesi istenilen disk bölümlerini için tanımlanmış configleri gösterirken. .swap uzantılı dosyalar ise swap alanları için yapılandırma dosyalarını içerir.


 root@h4kan:/home/hakan# cd /etc/systemd/  
 root@h4kan:/etc/systemd# ls  
 bootchart.conf logind.conf resolved.conf system.conf   user  
 journald.conf  network   system     timesyncd.conf user.conf  
 root@h4kan:/etc/systemd# cd system  
 root@h4kan:/etc/systemd/system# ls  
 bluetooth.target.wants           hybrid-sleep.target.wants  
 dbus-org.bluez.service           multi-user.target.wants  
 dbus-org.freedesktop.Avahi.service     network-online.target.wants  
 dbus-org.freedesktop.ModemManager1.service paths.target.wants  
 dbus-org.freedesktop.nm-dispatcher.service printer.target.wants  
 dbus-org.freedesktop.thermald.service    shutdown.target.wants  
 default.target.wants            sockets.target.wants  
 display-manager.service           sshd.service  
 display-manager.service.wants        suspend.target.wants  
 getty.target.wants             sysinit.target.wants  
 graphical.target.wants           syslog.service  
 hibernate.target.wants           timers.target.wants  




Servislerin systemd ile yönetilmesi

Servisleri yönetmek için yaygın olarak systemctl aracı kullanılır.

Sytnax : systemctl start | stop | restart | reload | status servisadi.service

# systemctl start <hiz_adı>: Hizmet başlatma

# systemctl stop <hiz_adı>: Hizmet durdurma

# systemctl restart <hiz_adı>: Hizmeti yeniden başlatma

# systemctl status <hiz_adı> : Hizmetin durumu gösterme

# systemctl enable <hiz_adı>: Otomatik başlatma

# systemctl disable <hiz_adı>: Otomatik başlatma iptali

# systemctl mask <hiz_adı>: Servisi elle başlatmayı engelleme

# systemctl unmask <hiz_adı>: Elle başlatma engelini kaldırma

Linux sistemlerde görevleri, hizmet süreçleri ( service / daemon ) yerine getirir. Hizmet programları UNIX’te “daemon” olarak adlandırılır. Ve daemonların adları d harfi ile biter. Örnek: httpd, sshd, syslogd, crond, proftpd..


Klasik linux sistemlerinde hizmet programlarının betikleri “/etc/rc.d/init.d” veya “/etc/init.d” dizinin altında tutulur. Bu betikler (start | stop | restart | status | status | configtest) parametreleri kullanılarak çalıştırılabilir. Bu yolla süreçlerin yönetimi yapılır.

Hizmet süreçlerinin daha kolay yapılması için systemctl kullanılır. Ben burada httpd servisi için systemctl kullanarak apache servisini kullanacağım.

systemctl list-units --type service komutu ile sistemdeki bütün servisleri görüntüleriz.

 hakan@h4kan:~$ systemctl list-units --type service  
  UNIT            LOAD  ACTIVE SUB   DESCRIPTION  
  accounts-daemon.service   loaded active running Accounts Service  
  acpid.service        loaded active running ACPI event daemon  
  apache2.service       loaded active running LSB: Apache2 web server  
 ● apparmor.service      loaded failed failed LSB: AppArmor initialization  
  apport.service       loaded active exited LSB: automatic crash report   
  avahi-daemon.service    loaded active running Avahi mDNS/DNS-SD Stack  
  binfmt-support.service   loaded active exited Enable support for additiona  
  bluetooth.service      loaded active running Bluetooth service  
  console-setup.service    loaded active exited Set console font and keymap  
  cron.service        loaded active running Regular background program p  
  cups-browsed.service    loaded active running Make remote CUPS printers av  
  dbus.service        loaded active running D-Bus System Message Bus  
  getty@tty1.service     loaded active running Getty on tty1  
  grub-common.service     loaded active exited LSB: Record successful boot   
  hddtemp.service       loaded active exited LSB: disk temperature monito  
  irqbalance.service     loaded active running LSB: daemon to balance inter  
  keyboard-setup.service   loaded active exited Set console keymap  
  kmod-static-nodes.service  loaded active exited Create list of required stat  
  lightdm.service       loaded active running Light Display Manager  
  lm-sensors.service     loaded active exited Initialize hardware monitori  
  ModemManager.service    loaded active running Modem Manager  
  mysql.service        loaded active running MySQL Community Server  
 lines 1-23...skipping...  
  UNIT            LOAD  ACTIVE SUB   DESCRIPTION  
  accounts-daemon.service   loaded active running Accounts Service  
  acpid.service        loaded active running ACPI event daemon  
  apache2.service       loaded active running LSB: Apache2 web server  
 ● apparmor.service      loaded failed failed LSB: AppArmor initialization  
  apport.service       loaded active exited LSB: automatic crash report   
  avahi-daemon.service    loaded active running Avahi mDNS/DNS-SD Stack  
  binfmt-support.service   loaded active exited Enable support for additiona  
  bluetooth.service      loaded active running Bluetooth service  
  console-setup.service    loaded active exited Set console font and keymap  
  cron.service        loaded active running Regular background program p  
  cups-browsed.service    loaded active running Make remote CUPS printers av  
  dbus.service        loaded active running D-Bus System Message Bus  
  getty@tty1.service     loaded active running Getty on tty1  
  grub-common.service     loaded active exited LSB: Record successful boot   
  hddtemp.service       loaded active exited LSB: disk temperature monito  
  irqbalance.service     loaded active running LSB: daemon to balance inter  
  keyboard-setup.service   loaded active exited Set console keymap  
  kmod-static-nodes.service  loaded active exited Create list of required stat  
  lightdm.service       loaded active running Light Display Manager  
  lm-sensors.service     loaded active exited Initialize hardware monitori  
  ModemManager.service    loaded active running Modem Manager  
  mysql.service        loaded active running MySQL Community Server  
  networking.service     loaded active exited Raise network interfaces  
  NetworkManager-wait-online.service loaded active exited Network Manager Wait Online  
  NetworkManager.service   loaded active running Network Manager  
  ondemand.service      loaded active exited LSB: Set the CPU Frequency S  
  polkitd.service       loaded active running Authenticate and Authorize U  
  rc-local.service      loaded active exited /etc/rc.local Compatibility  
  resolvconf.service     loaded active exited Nameserver information manag  
  rsyslog.service       loaded active running System Logging Service  
  rtkit-daemon.service    loaded active running RealtimeKit Scheduling Polic  
  setvtrgb.service      loaded active exited Set console scheme  
  snapd.service        loaded active running Snappy daemon  
  speech-dispatcher.service  loaded active exited LSB: Speech Dispatcher  

Yukardaki çıktıda sadece aktif servisleri görüntüledik. Yazdığımız komuta ek olarak all parametresi ekleyerek tüm servisleri görüntüleriz.


systemctl list-units --type service --all inactive durumundaki servisleride görüntüleyebiliriz.

 hakan@h4kan:~$ systemctl list-units --type service --all  
  UNIT                        LOAD   ACTIVE  SUB   DESCRIPTION  
  accounts-daemon.service               loaded  active  running Accounts Service  
  acpid.service                    loaded  active  running ACPI event daemon  
  alsa-restore.service                loaded  inactive dead  Save/Restore Sound Card State  
  alsa-state.service                 loaded  inactive dead  Manage Sound Card State (restore and store)  
  anacron.service                   loaded  inactive dead  Run anacron jobs  
  apache2.service                   loaded  active  running LSB: Apache2 web server  
 ● apparmor.service                  loaded  failed  failed LSB: AppArmor initialization  
  apport.service                   loaded  active  exited LSB: automatic crash report generation  
  apt-daily.service                  loaded  inactive dead  Daily apt activities  
 ● auditd.service                   not-found inactive dead  auditd.service  
  avahi-daemon.service                loaded  active  running Avahi mDNS/DNS-SD Stack  
  binfmt-support.service               loaded  active  exited Enable support for additional executable binary formats  
  bluetooth.service                  loaded  active  running Bluetooth service  
  brltty.service                   loaded  inactive dead  Braille Device Support  
 ● cloud-init.service                 not-found inactive dead  cloud-init.service  
 ● console-screen.service               not-found inactive dead  console-screen.service  
  console-setup.service                loaded  active  exited Set console font and keymap  
  cron.service                    loaded  active  running Regular background program processing daemon  
  cups-browsed.service                loaded  active  running Make remote CUPS printers available locally  
  cups.service                    loaded  inactive dead  CUPS Scheduler  
  dbus.service                    loaded  active  running D-Bus System Message Bus  
  dns-clean.service                  loaded  inactive dead  Clean up any mess left by 0dns-up  
  emergency.service                  loaded  inactive dead  Emergency Shell  
  failsafe-x.service                 loaded  inactive dead  X.org diagnosis failsafe  
 ● festival.service                  not-found inactive dead  festival.service  
  friendly-recovery.service              loaded  inactive dead  Recovery mode menu  
  getty-static.service                loaded  inactive dead  getty on tty2-tty6 if dbus and logind are not available  
  getty@tty1.service                 loaded  active  running Getty on tty1  
  getty@tty7.service                 loaded  inactive dead  Getty on tty7  
  gpu-manager.service                 loaded  inactive dead  Detect the available GPUs and deal with any system changes  

systemctl list-unit-files --type service servislerin enable, disable durumunu görmek için bu komutu kullanırız.

 hakan@h4kan:~$ systemctl list-unit-files --type service  
 UNIT FILE                 STATE    
 accounts-daemon.service          enabled   
 acpid.service               disabled  
 alsa-restore.service            static   
 alsa-state.service             static   
 alsa-utils.service             masked   
 anacron-resume.service           enabled   
 anacron.service              enabled   
 apport-forward@.service          static   
 apt-daily.service             static   
 autovt@.service              enabled   
 avahi-daemon.service            enabled   
 binfmt-support.service           enabled   
 bluetooth.service             enabled   
 bootlogd.service              masked   
 bootlogs.service              masked   
 bootmisc.service              masked   
 brltty-udev.service            static   
 brltty.service               enabled   
 checkfs.service              masked   
 checkroot-bootclean.service        masked   
 checkroot.service             masked   
 colord.service               static   
 console-getty.service           disabled  
 console-setup.service           static   
 console-shell.service           disabled  
 container-getty@.service          static   
 cron.service                enabled   
 cryptdisks-early.service          masked   
 cryptdisks.service             masked   
 cups-browsed.service            enabled   
 cups.service                enabled   
 dbus-org.bluez.service           enabled   
 dbus-org.freedesktop.Avahi.service     enabled   
 dbus-org.freedesktop.hostname1.service   static   
 dbus-org.freedesktop.locale1.service    static   
 dbus-org.freedesktop.login1.service    static   
 dbus-org.freedesktop.ModemManager1.service enabled   
 dbus-org.freedesktop.network1.service   disabled  
 dbus-org.freedesktop.nm-dispatcher.service enabled   

Herhangi bir servisin durumunu öğrenmek içinde

systemctl status apache2 komutunu kullanırız. Ben apache2 servisinin durumuna bakıyorum.


 hakan@h4kan:~$ systemctl status apache2  
 ● apache2.service - LSB: Apache2 web server  
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)  
  Drop-In: /lib/systemd/system/apache2.service.d  
       └─apache2-systemd.conf  
   Active: active (running) since Paz 2017-02-12 14:49:12 +03; 57min ago  
    Docs: man:systemd-sysv-generator(8)  
  Process: 1645 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)  
   CGroup: /system.slice/apache2.service  
       ├─1781 /usr/sbin/apache2 -k start  
       ├─1809 /usr/sbin/apache2 -k start  
       ├─1810 /usr/sbin/apache2 -k start  
       ├─1811 /usr/sbin/apache2 -k start  
       ├─1812 /usr/sbin/apache2 -k start  
       └─1813 /usr/sbin/apache2 -k start  
 Şub 12 14:49:11 h4kan systemd[1]: Starting LSB: Apache2 web server...  
 Şub 12 14:49:11 h4kan apache2[1645]: * Starting Apache httpd web server apache2  
 Şub 12 14:49:12 h4kan apache2[1645]: *  
 Şub 12 14:49:12 h4kan systemd[1]: Started LSB: Apache2 web server.  

Çıktıda görebileceğiniz gibi servisin loaded olduğu, servise ait unit file’ın tam path’inin/usr/lib/systemd/system/apache2.service.d olduğu ve startup’a ekli olduğu (enabled) görüntülenmektedir.

Ayrıca, servisin state’inin active (running) olduğu ve ne kadardır up olduğu bildirilmektedir. Main PID numarası Linux Control Group bilgileri ve servisin ürettiği logun son bir kısmı yer bildirilmektedir.

Servisi başlatmak için

#systemctl start httpd

servisi durdurmak için

#systemctl stop httpd

Servisi reload etmek için

#systemctl reload httpd 

Servisi restart etmek için

#systemctl restart httpd

Servislerin açılışta çalıştırılması için

#systemctl enable httpd 

servisin açılışta çalıştırılmaması için yani startuptan kaldırmak için

#systemctl disable httpd

Enable ettiğiniz bir servisin tekrar başlatılmaması için mask parametresi kullanılır.

#systemctl mask httpd 

maskı kaldırmak içinde unmask parametresi kullanılır.

#systemctl unmask httpd
  

Özetlersek systemd, Linux işletim sistemleri için geliştirilmiştir.
Amacı; bilgisayardaki sistem ve servislerin çalışmasını organize etmektir. systemd tabiki bununla kalmıyor ve çok fazla işlevi var. Ben genel hatlarıyla anlatmaya çalıştım.  

Hiç yorum yok:

Yorum Gönder