Script'i günde bir kez systemd ile çalıştırın


13

Makinemi açtıktan 10 dakika sonra ancak günde sadece bir kez yedek komut dosyası çalıştırmak istiyorum. Systemd ile böyle senaryolar oluşturmak mümkün müdür?


3
İhtiyaçlarınızı tam olarak anlamıyorum, lütfen açıklığa kavuşturun. Bir günde makinenizin servis zamanlarını yeniden başlatırsanız, komut dosyasının yalnızca ilk yeniden başlatmanın ardından çalıştırılması gerektiğini anlıyorum, doğru mu? Makineniz 1 günden daha uzun bir süre çalışıyorsa, komut dosyası art arda günler içinde mi çalıştırılmalıdır?
Krzysztof Adamski

Kesinlikle. Bilgisayarımı ne sıklıkta yeniden başlatırsam yapayım her gün yedekleme yapacağım.
Fu86

5
Systemd'de takılı değilseniz, tam olarak anacron bunun için kullanılır.
Gilles 'SO- kötü olmayı bırak'

Yanlış olabilirim ama önyükleme tamamlandıktan sadece 10 dakika sonra komut dosyasını çalıştırmak için anacron ayarlamanın kolay bir yolu yoktur.
Krzysztof Adamski

Doğru. Bu yüzden şu anda günlük bir iş ile anacron ve iyi yaşlı kullanıyorumecho "obnam backup" | at "now + 10 minutes"
Adrien Clerc

Yanıtlar:


11

Bkz /lib/systemd/system/systemd-tmpfiles-clean.timer:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Bu, ilgili .servicedosyayı önyüklemeden 15 dakika sonra ve sistem açıkken her gün çalıştırır. Aynı gün içinde birden çok kez yeniden başlatırsanız, yedek komut dosyasının arşivin zamanını kontrol etmesini ve bir günden daha eski olması durumunda bu çalıştırmayı atlamasını sağlayabilirsiniz.

Ayrıca, yedeklemeleriniz ES üzerinde yoğunlaşacaksa , systemd.exec (5) kılavuzundaki IOScheduling * yönergelerini okumak faydalı olabilir .


5

Yeniden başlatmalar arasında herhangi bir durumu takip etmediği için bunu tamamen systemd'de yapmanın mümkün olduğunu düşünmüyorum. Sen tefriş çizme kullandıktan sonra 10 dakika çalıştırmak için bir şey zamanlayabilirsiniz systemd.timerve onun OnBootSec=ya OnStartupSec=.

Komut dosyasının kendisi, bugün zaten çalıştırılıp çalıştırılmadığını kontrol etmelidir. Bu, bash'da bile kolayca uygulanabilir, örneğin:

#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`

[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE

1

Önyüklemeden 10 dakika sonra askıda kalmazsanız şunları yapabilirsiniz:

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailyPersisten=trueen az bir cevapsız çalışma olması durumunda her gece yarısını çalıştırır.


0

Görünüşe göre bu sorun gelecekteki sürümlerde ele alınacaktır. En azından systemd-devel posta listesindeki bu e-postaya göre . Krzysztof'un önerdiği hileli yoldan gitmek zorunda kalana kadar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.