Skip to content

Systemd Nedir ve Service Nasıl Oluşturulur?

Published: at 08:20 PMSuggest Changes

Systemd, linuxta system ve service yönetimi yapmakatadir. Aynı zamada bazı işletim sistemlerinde SysV ve LSB ile de beraber çalışabilmektedir.

Systemd daemon olarak PID 1 de çalışmaktadır.

Systemd’de bütün görevler units olarak organize edilmektedir. Birçok farklı unitler bulunmaktadır. Bunlar:

Örnek olarak bir secure shell daemon başlatıldığında unit ssh.service kullanılmaktadır.

[Unit] Dosyası Elementleri

Bir Unit dosyası çoğunlukla Unit ile başlamaktadır.

Örnek bir unir dosyası aşağıdaki şekildedir:

[Unit]
Description=Service description
Documentation=https://aliyilmaz.co
After=network.target
Wants=network-online.target
Requires=postgresql.service

[Service]
User=aly
Group=aly
WorkingDirectory=/home/code
ExecStart=/home/code/run.sh
ExecStop=/bin/kill -s QUIT $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=30
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
EnvironmentFile=/home/code/.env
KillMode=process
Type=simple

[Install]
WantedBy=multi-user.target

# touch **/etc/systemd/system/*<name>*.service** ile unit dosyasını oluşturduktan sonra içerisine unit ayarları eklenmelidir.

Daha sonrasında sırasıyla kodları çalıştırmak yeterli olacaktır.

systemctl daemon-reload # systemd yapılandırmalarını yeniler
systemctl enable name.service # sistem başlangıcında oto açılması için ekler
systemctl start <name>.service # service hemen başlatılır
systemctl status name.service # servicenin güncel status durumunu gösterir
journalctl -u name.service # ilgili service için log kayıtlarını gösterir

Çalıştırılacak kodun bir python kodu olduğunu düşünürsek oluşturmamız gereken run.sh dosyası aşağı yukarı bu şekilde olması gerekmektedir (venv önceden kurulduğu senaryoda geçerlidir).

#!/bin/bash
set -e

echo "$(date '+%Y-%m-%d %H:%M:%S') - Başlatılıyor..." >> /home/code/logs/service.log

cd /home/code

source /home/code/virtual/bin/activate

python3 -u /home/code/app.py "$@"

exit_code=$?

echo "$(date '+%Y-%m-%d %H:%M:%S') - Program sonlandı, çıkış kodu: $exit_code" >> /home/code/logs/service.log

exit $exit_code

Next Post
Cron Job Nedir?