Чтобы немедленно прервать и закрыть скрипт, если последнее выполнение еще не было хотя бы определенного времени назад, вы можете использовать этот метод, для которого требуется внешний файл, в котором хранятся дата и время последнего выполнения.
Добавьте эти строки в начало вашего скрипта 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:
Не забудьте установить значимое значение datefile=
и адаптировать значение seconds=
к вашим потребностям ( $((60*60*24*3))
оценивается до 3 дней).
Если вам не нужен отдельный файл, вы также можете сохранить время последнего выполнения в метке времени изменения вашего скрипта. Это означает, однако, что при внесении любых изменений в ваш файл скрипта счетчик 3 будет сброшен и будет рассматриваться, как если бы скрипт был успешно запущен.
Чтобы реализовать это, добавьте приведенный ниже фрагмент вверху файла скрипта:
#!/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:
Опять же, не забудьте адаптировать значение seconds=
к вашим потребностям ( $((60*60*24*3))
оценивается в 3 дня).
*/3
не работает? «если 3 дня не прошло»: три дня с чего? Пожалуйста, отредактируйте свой вопрос и уточните .