Para abortar inmediatamente y salir de un script si la última ejecución aún no fue al menos hace un tiempo específico, puede usar este método que requiere un archivo externo que almacene la última fecha y hora de ejecución.
Agregue estas líneas a la parte superior de su 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:
No olvide establecer un valor significativo como datefile=
y adaptar el valor seconds=
a sus necesidades (se $((60*60*24*3))
evalúa en 3 días).
Si no desea un archivo separado, también puede almacenar el último tiempo de ejecución en la marca de tiempo de modificación de su script. Sin embargo, eso significa que al hacer cualquier cambio en su archivo de script se restablecerá el contador 3 y se tratará como si el script se estuviera ejecutando correctamente.
Para implementar eso, agregue el fragmento a continuación en la parte superior de su archivo 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:
Nuevamente, no olvide adaptar el valor de seconds=
sus necesidades (se $((60*60*24*3))
evalúa en 3 días).
*/3
no funciona? "si no han pasado 3 días": ¿tres días desde qué? Por favor, editar su pregunta y aclarar.