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.