Для негайного переривання та виходу із сценарію, якщо останнє виконання ще не було хоча б певний час тому, ви можете використовувати цей метод, який вимагає зовнішнього файлу, який зберігає останню дату та час виконання.
Додайте ці рядки до верхньої частини сценарію 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 дні не минули": три дні з того часу? Будь ласка , змініть своє питання і уточнити.