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.