Chcę uruchomić skrypt tworzenia kopii zapasowych 10 minut po uruchomieniu komputera, ale tylko raz dziennie. Czy możliwe jest budowanie takich scenariuszy za pomocą systemd?
echo "obnam backup" | at "now + 10 minutes"
Chcę uruchomić skrypt tworzenia kopii zapasowych 10 minut po uruchomieniu komputera, ale tylko raz dziennie. Czy możliwe jest budowanie takich scenariuszy za pomocą systemd?
echo "obnam backup" | at "now + 10 minutes"
Odpowiedzi:
Zobacz /lib/systemd/system/systemd-tmpfiles-clean.timer
::
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Spowoduje to uruchomienie odpowiedniego .service
pliku 15 minut po uruchomieniu, a następnie każdego dnia, gdy system jest uruchomiony. Jeśli ponownie uruchomisz komputer wiele razy w tym samym dniu, możesz po prostu sprawić, by skrypt kopii zapasowej sprawdził czas archiwizacji i pominął uruchamianie, jeśli ma mniej niż jeden dzień.
Ponadto, jeśli kopie zapasowe będą obciążone na IO, pomocne może być przeczytanie o dyrektywach IOScheduling * na stronie systemd.exec (5) .
Nie sądzę, że można to zrobić całkowicie w systemie, ponieważ nie śledzi żadnego stanu między restartami. Możesz łatwo zaplanować uruchomienie programu po 10 minutach od uruchomienia systemd.timer
i jego OnBootSec=
lub OnStartupSec=
.
Sam skrypt musi sprawdzić, czy został już uruchomiony dzisiaj, czy nie. Można to łatwo wdrożyć nawet w bash, na przykład:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
Jeśli nie rozłączyłeś się po 10 minutach od uruchomienia, możesz:
[Unit]
Description=...
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar=daily
sprawia, że działa on o północy, Persisten=true
podczas rozruchu, jeśli było co najmniej jedno pominięte uruchomienie.