Systemd ile Kendi Servisini Yaz: Flask ve Yedekleme Script’i Üzerinden Uygulamalı Rehber

Systemd ile Kendi Servisini Yaz: Flask ve Yedekleme Script’i Üzerinden Uygulamalı Rehber

Linux’ta çalışan bir script ya da uygulamayı sürekli aktif halde tutmak, hata durumunda yeniden başlatmak veya sistemi yeniden başlattığınızda otomatik olarak ayağa kaldırmak istiyorsanız systemd tam aradığınız şey.

Bu rehberde hem bir Flask uygulamasını, hem de günlük çalışan basit bir yedekleme script’ini systemd servislerine dönüştüreceğiz.
Gereksiz terimler yok, doğrudan uygulanabilir, sade örneklerle ilerliyoruz.


1. Flask Uygulamasını Servis Haline Getirme

a) Flask App Hazırlığı

mkdir ~/flask-app && cd ~/flask-app

app.py içeriği:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Merhaba Systemd!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

Virtualenv:

python3 -m venv venv
source venv/bin/activate
pip install flask

b) Servis Dosyasını Yazalım

sudo nano /etc/systemd/system/flask-app.service
[Unit]
Description=Basit Flask Uygulaması
After=network.target

[Service]
User=adem
WorkingDirectory=/home/adem/flask-app
ExecStart=/home/adem/flask-app/venv/bin/python3 /home/adem/flask-app/app.py
Restart=always
RestartSec=5
Environment="FLASK_ENV=production"

[Install]
WantedBy=multi-user.target

c) Servisi Başlat ve Etkinleştir

sudo systemctl daemon-reload
sudo systemctl start flask-app
sudo systemctl enable flask-app

Durum kontrol:

systemctl status flask-app

Logları izlemek için:

journalctl -u flask-app -f

2. Günlük Otomatik Çalışan Yedekleme Script’i

Bazen bir bash script’in günlük olarak otomatik çalışmasını istersin. Bu örnekte basit bir custom-backup.sh script’ini systemd ile her gün 03:00’te çalışacak şekilde tanımlayacağız.

a) Script Dosyasını Oluştur

sudo mkdir -p /opt/scripts
sudo nano /opt/scripts/custom-backup.sh
#!/bin/bash
TIMESTAMP=$(date +%Y-%m-%d_%H-%M)
BACKUP_DIR="/var/backups"
SRC_DIR="/etc"

mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/etc-backup-$TIMESTAMP.tar.gz" "$SRC_DIR"

echo "Yedekleme tamamlandı: $TIMESTAMP"

İzinleri ver:

sudo chmod +x /opt/scripts/custom-backup.sh

b) Systemd Servis Tanımı

sudo nano /etc/systemd/system/custom-backup.service
[Unit]
Description=Günlük Yedekleme Script'i

[Service]
Type=oneshot
ExecStart=/opt/scripts/custom-backup.sh

Bu servis çalıştığında script bir kez çalışır ve kapanır.


c) Systemd Timer ile Her Gün Otomatik Çalıştırma

sudo nano /etc/systemd/system/custom-backup.timer
[Unit]
Description=Günlük Yedekleme Zamanlayıcısı

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

d) Aktif Et ve Kontrol Et

sudo systemctl daemon-reload
sudo systemctl enable --now custom-backup.timer

Durumu görmek için:

systemctl list-timers | grep custom-backup

Loglara bakmak istersen:

journalctl -u custom-backup.service -f

Özet Tablo

İşlem Komut / Yer
Servis dosyası /etc/systemd/system/*.service
Zamanlayıcı dosyası /etc/systemd/system/*.timer
Servisi başlatmak systemctl start service-name
Otomatik başlatmak systemctl enable service-name
Log’ları görmek journalctl -u service-name -f
Timer çalışıyor mu? systemctl list-timers

Systemd sayesinde hem sürekli çalışan uygulamaları (örneğin Flask app), hem de zamanlanmış görevleri (örneğin yedekleme script’i) Linux dünyasında kolayca kontrol edilebilir servisler haline getirebilirsin.

Kurumsal bir yapı kurmak zorunda değilsin. Tek bir *.service dosyası ile küçük projelerini bile daha sağlam, izlenebilir ve yönetilebilir hale getirebilirsin.

Read more