Per interrompere immediatamente ed uscire da uno script se l'ultima esecuzione non era ancora almeno un tempo specifico, è possibile utilizzare questo metodo che richiede un file esterno che memorizza la data e l'ora dell'ultima esecuzione.
Aggiungi queste righe all'inizio dello script Bash:
#!/bin/bash
# File that stores the last execution date in plain text:
datefile=/path/to/your/datefile
# Minimum delay between two script executions, in seconds.
seconds=$((60*60*24*3))
# Test if datefile exists and compare the difference between the stored date
# and now with the given minimum delay in seconds.
# Exit with error code 1 if the minimum delay is not exceeded yet.
if test -f "$datefile" ; then
if test "$(($(date "+%s")-$(date -f "$datefile" "+%s")))" -lt "$seconds" ; then
echo "This script may not yet be started again."
exit 1
fi
fi
# Store the current date and time in datefile
date -R > "$datefile"
# Insert your normal script here:
Non dimenticare di impostare un valore significativo come datefile=
e di adattare il valore seconds=
alle tue esigenze ( $((60*60*24*3))
valuta 3 giorni).
Se non si desidera un file separato, è anche possibile memorizzare l'ultima ora di esecuzione nel timestamp di modifica dello script. Ciò significa tuttavia che apportare modifiche al file di script reimposterà il contatore 3 e verrà trattato come se lo script fosse stato eseguito correttamente.
Per implementarlo, aggiungi lo snippet di seguito nella parte superiore del file di script:
#!/bin/bash
# Minimum delay between two script executions, in seconds.
seconds=$((60*60*24*3))
# Compare the difference between this script's modification time stamp
# and the current date with the given minimum delay in seconds.
# Exit with error code 1 if the minimum delay is not exceeded yet.
if test "$(($(date "+%s")-$(date -r "$0" "+%s")))" -lt "$seconds" ; then
echo "This script may not yet be started again."
exit 1
fi
# Store the current date as modification time stamp of this script file
touch -m -- "$0"
# Insert your normal script here:
Ancora una volta, non dimenticare di adattare il valore seconds=
alle tue esigenze ( $((60*60*24*3))
valuta 3 giorni).
*/3
non funziona? "se non sono trascorsi 3 giorni": tre giorni da cosa? Si prega di modificare la tua domanda e chiarire.