Uzun yıllardır linux dünyasındaki cron görevlerinin yerini systemd ile birlikte zamanlayıcılar almaya başlıyor. Yeni bir zamanlayıcı yaratmaya çalışacağım.
Örnek olarak her pazar gecesi çalışması gereken bir "eski dosyaları silme" görevimiz olsun. Bu iş için eski_dosyalari_sil.sh dosyasının içeriği şöyle olabilir:
#!/bin/bash
find /user/metin/ -mtime -180 -exec rm -rf {} -
Bu dosyayı örneğin profilimizin altına kaydedip, çalıştırma yetkisi vermeyi unutmamak gerek:
$ chmod +x /home/metin/eski_dosyalari_sil.sh
Yapılması gereken 2 adımlı işimizin ilk adımı bir service birimi oluşturmak.
/usr/lib/systemd/system/temizlik.service
gibi bir yol ile kaydedeceğimiz dosyanın içeriği şöyle olabilir:
[Unit]
Description=Eski Dosyalari Silme
[Service]
Type=simple
ExecStart=/home/metin
[Install]
WantedBy=multi-user.target
Description=Eski Dosyalari Silme
[Service]
Type=simple
ExecStart=/home/metin
[Install]
WantedBy=multi-user.target
İkinci adımda da bir zamanlayıcı (timer) birimi oluştırmalıyız. Bunun için de
/usr/lib/systemd/system/backup.timer
yolu ile şöyle bir dosya oluşturabiliriz:
[Unit]
Description=Execute backup every night
[Timer]
OnCalendar=*-*-* 00:00:00
Unit=temizlik.service
[Install]
WantedBy=multi-user.target
Description=Execute backup every night
[Timer]
OnCalendar=*-*-* 00:00:00
Unit=temizlik.service
[Install]
WantedBy=multi-user.target
Bu adımdan sonra yapılacak tek şey zamanlayıcı birimini systemctl ile etkinleştirip başlatmak:
$ sudo systemctl enable temizlik.timer
$ sudo systemctl start temizlik.timer
temizlik.timer birim dosyası içinde OnCalendar satırında ne zaman çalışacağı belirtiliyor. Yukarıdaki örnekte yazılan
Calendar=*-*-* 00:00:00
UTC'ye göre 00:00:00 her gün demek. cron görevlerindeki zamanlama gibi buradaki sıra da yıl *-*-* için yıl-ay-gün şeklinde. Bundan sonraki 00:00:00 günün saati anlamında. Bunun yerine
Calendar=daily
de kullanılabilirdi.
Daha fazla örnek için [3] veya [4]'e bakılabilir. Persistent=true gibi bir komutla sistem açıldığında kaçırlmış görevlerin de çalıştırılması sağlanabilir.
service veya timer dosyalarında bir değişiklik yaptıktan sonra etkili olabilmesi için hizmetleri tekrar çalıştırma veya aşağıdaki gibi tekrar yüklemeliyiz:
# systemctl daemon-reload
Mevcut sistemdeki tüm aktif zamanlayıcıları görmek için
$ systemctl list-timers
kullanılabilir. Pasif olanları da görmek için --all anahtarı eklenebilir.
---
Hiç yorum yok:
Yorum Gönder