Script Çalıştırma Standartları
Scripti yazdık, peki nasıl çalıştıracağız? "Arkaplanda çalışsın" veya "Her gece çalışsın" dediğimizde aklımıza gelen ilk yöntemler (nohup, cron) genelde en iyi yöntemler değildir.
1. Zamanlanmış Görevler: Cron vs Systemd Timers
Prodüksiyon sunucularında Cron kullanmayı önermiyoruz. Neden?
- Cron hatayı sessizce yutar (Loglamazsa göremezsiniz).
- Bağımlılık yönetemez (Network gelmeden çalışırsa patlar).
Önerilen: Systemd Timers
Bir işi her gece 03:00'te yapmak için iki dosya oluşturuyoruz:
A. Service Dosyası (/etc/systemd/system/myscript.service)
Gerçek işi yapan tanım.
[Unit]
Description=My Backup Script
[Service]
Type=oneshot
ExecStart=/opt/scripts/backup.sh
User=deployer
B. Timer Dosyası (/etc/systemd/system/myscript.timer)
Zamanlayıcı tanımı.
[Unit]
Description=Run backup every night
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
Aktifleştirme:
2. Arkaplan İşlemleri (Background Execution)
Bir scripti SSH'ı kapattıktan sonra da çalışsın diye nohup script.sh & ile çalıştırmak "amatörce"dir. Süreç yönetilemez, öldürülemez, logları karışır.
Çözüm: Systemd Service (Type=simple)
Eğer bir bot veya sürekli çalışan bir scriptiniz varsa, onu daima Systemd servisi yapın.
Rehber: Kendi Systemd Servisini Yaz
3. Loglama Yönetimi
Script çıktılarını (stdout) yönetmek önemlidir.
Kötü Yöntem
Bu dosya sonsuza kadar büyür ve diski doldurur (Disk Full vakalarının 1 numaralı sebebidir).
İyi Yöntem (Logrotate veya Journald)
Systemd ile çalıştırırsanız, çıktılar otomatik olarak journalctl tarafından yönetilir ve sıkıştırılır.
Logları izlemek için: