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.