Quiero ejecutar un script de respaldo 10 minutos después de iniciar mi máquina, pero solo una vez al día. ¿Es posible construir tales escenarios con systemd?
echo "obnam backup" | at "now + 10 minutes"
Quiero ejecutar un script de respaldo 10 minutos después de iniciar mi máquina, pero solo una vez al día. ¿Es posible construir tales escenarios con systemd?
echo "obnam backup" | at "now + 10 minutes"
Respuestas:
Ver /lib/systemd/system/systemd-tmpfiles-clean.timer
:
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Esto ejecuta el .service
archivo correspondiente 15 minutos después del arranque y luego todos los días mientras el sistema está activo. Si reinicia varias veces en el mismo día, puede hacer que el script de copia de seguridad verifique el tiempo del archivo y omita esa ejecución si tiene menos de un día de antigüedad.
Además, si sus copias de seguridad serán pesadas para IO, puede ser útil leer sobre las directivas IOScheduling * en la página de manual systemd.exec (5) .
No creo que sea posible hacer esto completamente en systemd, ya que no rastrea ningún estado entre reinicios. Puede programar fácilmente algo para que se ejecute 10 minutos después del inicio usando systemd.timer
y su OnBootSec=
o OnStartupSec=
.
El script en sí tiene que verificar si ya se ejecutó hoy o no. Esto se puede implementar fácilmente incluso en bash, por ejemplo:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE