Konuyu Açan
#1
Zamanlanmış Görevler: systemd timers ile güvenilir görev yönetimi
Giriş ve kavramsal çerçeve
systemd, timer birimlerini kullanarak belirli bir zamanlamaya göre çalışan arka plan görevlerini (houston, non-interactive daimi süreçler) koordine eder. Bir timer, hangi zamanı veya aralığı hedeflediğini belirtirken, karşılık gelen bir service birimi bu işin kendisini tanımlar. Bu yapı, cron’un basit zamanlamasından farklı olarak, başarısızlıkları doğrudan günlükler üzerinden izleme, zaman kaymasından etkilenmeme ve geçmiş çalışmaları ile yeniden çalıştırma davranışlarını sağlar.
Temel terimler ve akış
Örnek senaryo: Haftalık günlük raporu
1) /etc/systemd/system/rapor haftalik.timer oluşturalım
OnCalendar=Sun --* 02:00:00
2) /etc/systemd/system/rapor haftalik.service içeriği:
3) Aktif etme ve başlatma:
systemctl daemon-reload
systemctl enable --now rapor_haftalik.timer
Bu sayede her pazar 02:00’da rapor scripti çalışır ve günlükler journal’a yazar.
Güvenilirlik ve üretim tavsiyeleri
Kapatış ve teknik etkileşimler
systemd timers, güvenilirliğin kritik olduğu üretim ortamlarında cron’a kıyasla daha görünür hata yönetimi ve esneklik sunar. Özellikle dağıtık mikroservis mimarilerinde belirli olaylar tetiklenen işlemler için doğal bir uyum sağlar. Bu yaklaşımı kendi altyapınıza uyarlarken, zamanlama gereksinimlerinizi netleştirin ve günlükleme/izleme ile entegre edin. Bu konuda kendi kurulumlarınızdan karşılaştığınız zorluklar veya önerileriniz varsa paylaşın.
Yıllardır cron ile basit zamanlamalar kurduk; fakat modern Linux dağıtımları için systemd timers, olay odaklı çalışma ve daha zarlı hata yönetimi sunar. Bu yazıda, timer ve service birimlerinin nasıl bir araya geldiğini, temel kavramları ve pratik kullanımı adım adım inceleyeceğim.
Giriş ve kavramsal çerçeve
systemd, timer birimlerini kullanarak belirli bir zamanlamaya göre çalışan arka plan görevlerini (houston, non-interactive daimi süreçler) koordine eder. Bir timer, hangi zamanı veya aralığı hedeflediğini belirtirken, karşılık gelen bir service birimi bu işin kendisini tanımlar. Bu yapı, cron’un basit zamanlamasından farklı olarak, başarısızlıkları doğrudan günlükler üzerinden izleme, zaman kaymasından etkilenmeme ve geçmiş çalışmaları ile yeniden çalıştırma davranışlarını sağlar.
Temel terimler ve akış
- Timer birimi (ör. mytask.timer): Ne zaman tetikleneceğini belirtir. OnCalendar, OnBootSec, OnUnitActiveSec gibi seçenekler içerir.
- Service birimi (ör. mytask.service): Gerçek işi yapan birimdir. ExecStart ile çalıştırılacak komutu belirtir.
- Wants/WantedBy: Hangi hedeflerin bu timer ile ilişkilendirildiğini gösterir. Genelde multi-user.target karşılığında çalışır.
- Journal ve geri alma: Hata durumunda günlükler ve yeniden deneme politikaları systemd journal üzerinden incelebilir.
Örnek senaryo: Haftalık günlük raporu
1) /etc/systemd/system/rapor haftalik.timer oluşturalım
OnCalendar=Sun --* 02:00:00
2) /etc/systemd/system/rapor haftalik.service içeriği:
KOD
12345678
[Unit]
Description=Haftalık günlük raporu üret
[Service]
Type=simple
ExecStart=/usr/local/bin/gerceklesen_rapor.sh
[Install]
WantedBy=timers.target
3) Aktif etme ve başlatma:
systemctl daemon-reload
systemctl enable --now rapor_haftalik.timer
Bu sayede her pazar 02:00’da rapor scripti çalışır ve günlükler journal’a yazar.
Güvenilirlik ve üretim tavsiyeleri
- OnCalendar ile zaman kayması veya varyasyonlarını minimize etmek için sabit zamanlar yerine olay odaklı takvimler kullanın.
- Persistent=true ayarı ile birim çalıştırılmadığı zaman bile timer akışını kaydetmesini sağlayın.
- Tekrarlama ve geri deneme politikaları için Restart=on-failure ve RestartSec ile güvenilirlik inşa edin.
- Günlükleri ve sağlık durumunu izlemek adına systemd-analyze calendar/interval komutlarıyla zamanlama performansını doğrulayın.
Kapatış ve teknik etkileşimler
systemd timers, güvenilirliğin kritik olduğu üretim ortamlarında cron’a kıyasla daha görünür hata yönetimi ve esneklik sunar. Özellikle dağıtık mikroservis mimarilerinde belirli olaylar tetiklenen işlemler için doğal bir uyum sağlar. Bu yaklaşımı kendi altyapınıza uyarlarken, zamanlama gereksinimlerinizi netleştirin ve günlükleme/izleme ile entegre edin. Bu konuda kendi kurulumlarınızdan karşılaştığınız zorluklar veya önerileriniz varsa paylaşın.
