Esegui Script una volta al giorno con systemd


13

Voglio eseguire uno script di backup 10 minuti dopo l'avvio del mio computer, ma solo una volta al giorno. È possibile creare tali scenari con systemd?


3
Non capisco perfettamente le tue esigenze, ti preghiamo di chiarire. Capisco che se riavvii i tempi serveral della tua macchina in un giorno, lo script dovrebbe essere eseguito solo dopo il primo riavvio, giusto? Se la macchina funziona per più di 1 giorno, lo script deve essere eseguito in giorni consecutivi?
— Krzysztof Adamski,

Esattamente. Eseguirò un backup ogni giorno, indipendentemente dalla frequenza con cui riavvio il mio PC.
— Fu86,

5
Se non sei bloccato su systemd, questo è esattamente ciò che anacron è per.
— Gilles 'SO- smetti di essere malvagio' il

Potrei sbagliarmi, ma non c'è modo semplice di impostare anacron per eseguire lo script solo 10 minuti dopo il completamento dell'avvio.
— Krzysztof Adamski,

Giusto. Ecco perché attualmente sto usando anacron e il buon vecchio in, con un lavoro quotidiano comeecho "obnam backup" | at "now + 10 minutes"
— Adrien Clerc

Risposte:


10

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

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Questo esegue il .servicefile corrispondente 15 minuti dopo l'avvio e quindi ogni giorno mentre il sistema è attivo. Se riavvii più volte nello stesso giorno, puoi semplicemente fare in modo che lo script di backup controlli il tempo di archiviazione dell'archivio e salti l'esecuzione se ha meno di un giorno.

Inoltre, se i tuoi backup saranno pesanti su IO, potrebbe essere utile leggere le direttive IOScheduling * nella manpage systemd.exec (5) .


5

Non penso che sia possibile farlo interamente in systemd in quanto non tiene traccia di nessuno stato tra i riavvii. È possibile pianificare facilmente l'esecuzione di qualcosa 10 minuti dopo l'avvio utilizzando systemd.timere relativo OnBootSec=o OnStartupSec=.

Lo script stesso deve verificare se è già stato eseguito oggi o meno. Questo può essere facilmente implementato anche in bash, ad esempio:

#/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

Se non sei bloccato dopo 10 minuti dall'avvio, puoi:

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailylo fa funzionare ogni mezzanotte, Persisten=trueall'avvio se c'è stata almeno una corsa persa.


0

Apparentemente questo problema verrà affrontato nelle versioni future. Almeno secondo questa e-mail nella mailing list di systemd-devel. Fino a quel momento devi seguire la strada hackerata proposta da Krzysztof.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.