Para abortar e sair imediatamente de um script, se a última execução ainda não foi há pelo menos um tempo específico, você pode usar este método que requer um arquivo externo que armazene a data e hora da última execução.
Adicione estas linhas na parte superior do seu 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:
Não se esqueça de definir um valor significativo datefile=
e adaptar o valor seconds=
às suas necessidades ( $((60*60*24*3))
avalia em 3 dias).
Se você não quiser um arquivo separado, também poderá armazenar o último tempo de execução no carimbo de data / hora de modificação do seu script. Isso significa, no entanto, que fazer alterações no arquivo de script redefinirá o contador 3 e será tratado como se o script estivesse sendo executado com êxito.
Para implementar isso, adicione o snippet abaixo na parte superior do seu arquivo de 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:
Mais uma vez, não se esqueça de adaptar o valor seconds=
às suas necessidades ( $((60*60*24*3))
avalia em 3 dias).
*/3
não funciona? "se 3 dias não se passaram": três dias desde o que? Por favor edite sua pergunta e esclarecer.