Quero executar um script de backup 10 minutos após inicializar minha máquina, mas apenas uma vez por dia. É possível criar esses cenários com o systemd?
echo "obnam backup" | at "now + 10 minutes"
Quero executar um script de backup 10 minutos após inicializar minha máquina, mas apenas uma vez por dia. É possível criar esses cenários com o systemd?
echo "obnam backup" | at "now + 10 minutes"
Respostas:
Veja /lib/systemd/system/systemd-tmpfiles-clean.timer
:
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Isso executa o .service
arquivo correspondente 15 minutos após a inicialização e todos os dias enquanto o sistema está ativo. Se você reiniciar várias vezes no mesmo dia, poderá fazer com que o script de backup verifique o horário do arquivo morto e pule a execução se tiver menos de um dia.
Além disso, se seus backups exigirem muito IO, pode ser útil ler sobre as diretivas IOScheduling * na página de manual systemd.exec (5) .
Eu não acho que é possível fazer isso totalmente no systemd, pois não controla nenhum estado entre as reinicializações. Você pode agendar facilmente algo para ser executado 10 minutos após o uso da inicialização systemd.timer
e seu OnBootSec=
ou OnStartupSec=
.
O próprio script deve verificar se ele já foi executado hoje ou não. Isso pode ser facilmente implementado mesmo no bash, por exemplo:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
Se você não desligar 10 minutos após a inicialização, pode:
[Unit]
Description=...
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar=daily
faz com que seja executado toda meia-noite, Persisten=true
na inicialização, se houver pelo menos uma execução perdida.