Linux başlangıçta program, komut ve script çalıştırma

Linux sistem başlangıcında program, kod veya script çalıştırmak aslında Windows ortamında aynı işlemi yapmaktan çok daha basittir. Ubuntu, Centos, Debian hatta Arc Linux bile artık aynı sistem başlangıç yöneticisi olan systemd altyapısını kullanıyor. 

Systemd nedir, Systemd ile başlangıç yönetimi nasıl yapılır? 

Systemd yeni Linux dağıtımlarının çoğunda kullanılan servis yönetim sistemidir. Sistem başlangıcına program ve script yerleştirmekten tutun bunların servis olarak ele alınıp hata durumunda ne yapılacağı, bunların kayıtlarının nerede tutulacağı gibi bir çok ayarı doğrudan yapmamızı sağlar. 

Systemd ilk çıktığında init, upstart gibi başlangıç yönetim sistemlerine göre çok daha kapsamlı olduğu ve sistemin bir çok noktasına müdahale ettiği için tepki gördü. İlk başlangıç sistemi yöneticisi olan init yani SysV bu işi basit bash scriptleri ile yapıyordu. Upstart bunu bir adım daha öteye götürerek ayar dosyalarının önünü açtı. Systemd ile ise artık birbirine bağlı hizmetler ve farklı unit birimleri oluşturulabiliyor.

SystemD ile başlangıçta program çalıştırma örneği

Kullanıcı yani bizim tarafından yazılması gereken systemd ayar dosyaları /etc/systemd/system dizinine kaydedilir. Bu dizine baktığınızda bir kaç ayar dosyası dışında neredeyse  boş olduğunu göreceksiniz. Bu sayede systemd yapılandırması oldukça kolay oluyor, bir sistemde çalışan kullanıcı tarafından eklenmiş her servisi ve unit’i burada görebilirsiniz. 

Şimdi kendi denemescript servisimizi oluşturalım:

nano /etc/system/systemd/denemescript.service
[Unit]
Description=denemescript
Requires=local-fs.target network-online.target
After=local-fs.target network-online.target


[Service]
Environment=envdegisken1=deger1
Environment=envdegisken2=deger2
Environment=envdegisken3=deger3
User=root
Group=root
Type=simple
ExecStart=/root/denemescript.sh
Restart=always
RestartSec=10


[Install]
WantedBy=multi-user.target

Bırada /root/denemescript.sh adresindeki scripti root kullanıcısı ve grubuyla çalıştıracak bir servis tanımladık. Yalnız bunun otomatik olarak sistem başlangıcına yerleşmeyeceğini unutmayalım. Başlangıçta script çalıştırmak için alttaki komutu da çalıştırıp servisi aktif hale getirmek gerekiyor:

systemctl enable denemescript.service

Bender şekilde disable komutu ile servisi başlangıçta çalışmasını devre dışı bırakabiliriz ve start stop komutlarıyla manuel olarak başlatıp durdurabiliriz.

systemctl start denemescript.service
systemctl stop denemescript.service

Systemd ile servis loglarına ulaşma

Bu servisin loglarına ise journalctl üzerinden ulaşıyoruz. 

journalctl -u denemescript
journalctl -u denemescript -f

komutları ile detaylı şekilde systemd servislerine ait log dosyalarını görüntüleyebilir ve takip edebiliriz. systemctl status denemescript ile ise log dosyalarının son satırlarını ve sistemin şu anki durumunu görüntüleyebiliyoruz.

Tüm systemd servislerini listeleme

Özel bir systemctl parametresi ile şuan çalışmakta olan tüm systemd servislerini listelemek de mümkündür:

systemctl list-units --type service --state running

Upstart ile sistem açılışında program komut ve script çalıştırma

Ubuntu 16 sürümünden önce Systemd yerine System V init ve Upstart destekleniyordu. Özellikle Ubuntu 14.04’ün günümüzde hala aktif olarak kullanıldığını düşünürsek upstart ile ilgili de bir kaç örnek vermek yararlı olur diye düşündüm.

Upstart nedir, ne işe yarar ve nasıl kullanılır

Upstart Ubuntu’nun yapıncısı Conanical tarafından geliştirilen bir başlangıç yönetim sistemidir. Ubuntu dışında Google ChromeOS’ta da kullanıldı. Debian, Fedora gibi dağıtımlar başta Upstart’ı destekleseler de sonradan SystemD kullanmaya karar verdiler. Kısacası upstart systemD öncesi dönemde kullanılan bir sistem başlangıç yöneticisidir

Upstart ile başlangıçta script çalıştırma örneği

Upstart ayar dosyaları /etc/init dizininde tutulur. SystemV script dosyalarının /etc/init.d de tutulduğunu düşünürsek doğrudan bir alternatif olarak tasarlandığını görebiliriz. Örnek bir başlangıç script olarka ornekservis isimli bir upstart servisi oluşturalım.

nano /etc/init/ornekservis.conf

Komutu ile gerekli ayar dosyamızı oluşturup alttaki ayarları girelim:

description "ornekservis"

env ortamdegiskeni1=deger1
env ortamdegiskeni2=deger2

start on runlevel [2345]
stop on runlevel [!2345]

respawn
post-stop exec sleep 5
limit nofile 65000 65000

setuid root
setgid root

chdir /root/ornekservis
exec /usr/bin/python ornekservis.py

Bu şekilde /root/ornekservis dizinindeki ornekservis.py dosyasını python kullanarak sistem başlangıcına yerleştirmiş olduk. Bu servisi systemd olduğu gibi başlangıca yerleştirmek için enable gibi bir komuta ihtiyacımız yok. Sistem başlangıcında otomatik olarak bu haliyle çalışacaktır. 

runlevel [2345] ifadesi servisin ne zaman çalışacağını belirtiyor. 2345 rakamları multi-user yani çoklu kullanıcı ortamının aktif olduğu zamanı belirtiyor. Böylece sistem hazır olana kadar çalışma ertelenmiş oluyor.

Upstart Servis Logları ve Kayıt Dosyaları

Upstart servislerinin çıktıları doğrudan dosyaya yazılıyor. Bu dosyalar varsayılan olarak /var/log/upstart/ dizinine kaydediliyor ve tail gibi temel sistem araçları ile gerçek zamanlı takip edilebiliyorlar. Yukarıdaki örnek servisimizi takip etmek için:

tail -f /var/log/upstart/redis-server.log

Komutunu kullanıyoruz. Şu an açık olan tüm servislerin log dosyalarını listelemek istersek lsof komutunu kullanabiliriz:

lsof +D /var/log/upstart/

Servisleri durdurup başlatmak ve durumların görüntülemek için alttaki service komutlarını kullanıyoruz:

service ornekservis start
service ornekservis status
service ornekservis stop

Çalışan servisleri listelemek için initctl komutunu şu şekilde kullanıyoruz:

initctl list | grep running

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir