Aby natychmiast przerwać wykonywanie skryptu i wyjść z niego, jeśli ostatnie wykonanie nie było jeszcze w określonym momencie, możesz użyć tej metody, która wymaga zewnętrznego pliku, który przechowuje datę i godzinę ostatniego wykonania.
Dodaj następujące wiersze u góry skryptu 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:
Nie zapomnij ustawić znaczącej wartości jako datefile=
i dostosować wartość seconds=
do swoich potrzeb ( $((60*60*24*3))
szacuje się na 3 dni).
Jeśli nie chcesz osobnego pliku, możesz również zapisać czas ostatniego wykonania w znaczniku czasu modyfikacji skryptu. Oznacza to jednak, że wprowadzenie jakichkolwiek zmian w pliku skryptu spowoduje zresetowanie licznika 3 i będzie traktowane tak, jakby skrypt działał poprawnie.
Aby to zaimplementować, dodaj poniższy fragment kodu na górze pliku skryptu:
#!/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:
Ponownie nie zapomnij dostosować wartości seconds=
do swoich potrzeb ( $((60*60*24*3))
ocenia do 3 dni).
*/3
nie działa „jeśli nie minęły 3 dni”: trzy dni od czego? Proszę edytować swoje pytanie i wyjaśnienia.