最後の実行がまだ特定の時間前でない場合にスクリプトを直ちに中止して終了するには、最後の実行日時を格納する外部ファイルを必要とするこのメソッドを使用できます。
次の行を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日が経過していない場合」:何日から3日?質問を編集して明確にしてください。