Ich möchte ein Backup-Skript 10 Minuten nach dem Booten meines Rechners ausführen, aber nur einmal am Tag. Ist es möglich, solche Szenarien mit systemd aufzubauen?
echo "obnam backup" | at "now + 10 minutes"
Ich möchte ein Backup-Skript 10 Minuten nach dem Booten meines Rechners ausführen, aber nur einmal am Tag. Ist es möglich, solche Szenarien mit systemd aufzubauen?
echo "obnam backup" | at "now + 10 minutes"
Antworten:
Siehe /lib/systemd/system/systemd-tmpfiles-clean.timer
:
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Dadurch wird die entsprechende .service
Datei 15 Minuten nach dem Start und dann jeden Tag ausgeführt, während das System in Betrieb ist. Wenn Sie mehrmals am selben Tag neu starten, können Sie das Sicherungsskript einfach die Uhrzeit des Archivs überprüfen lassen und die Ausführung überspringen, wenn es weniger als einen Tag alt ist.
Auch wenn Ihre Backups schwer mit E / A zu tun haben , kann es hilfreich sein, die IOScheduling * -Anweisungen in der Manpage systemd.exec (5) zu lesen .
Ich denke nicht, dass es möglich ist, dies vollständig in systemd zu tun, da es keinen Status zwischen Neustarts verfolgt. Sie können einfach planen, dass etwas 10 Minuten nach dem Booten ausgeführt wird, indem Sie systemd.timer
und OnBootSec=
oder verwenden OnStartupSec=
.
Das Skript selbst muss prüfen, ob es heute bereits ausgeführt wurde oder nicht. Dies kann auch in bash problemlos implementiert werden, zum Beispiel:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
Wenn Sie 10 Minuten nach dem Booten nicht aufgelegt haben, können Sie:
[Unit]
Description=...
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar=daily
Lässt es alle Mitternacht Persisten=true
beim Booten laufen, wenn mindestens ein Lauf verpasst wurde.