月に1回実行する特定のスクリプトが必要です(この質問を表示している他の人は、1日/週/年/5日に1回実行する必要がある場合があります)。
cronを使用してこれを行うことができることを知っています:
0 0 1 * * ./script.sh
しかし、その間隔の間にマシンがたまたまオフラインになった場合はどうなりますか(例として、特定の月の1日に電源を切ります)。
エレガントはありますか これに対する解決策は?または、I've-run-this-month-already
を設定するために、そのスクリプトにサブルーチンを含める必要がありますか? 値を入力してから、その値を確認するために別のスクリプトを毎日(または起動時に)実行しますか?
更新:
スクリプトを月の初めに月に1回実行する必要があります。さまざまなことを実行するためのスクリプトを作成しながら、以下のコードを作成しました。この質問を見つけた後で誰かが役立つと思った場合に備えて、ここに置いておきます。
# CHECK FOR THE OLD_MONTH FILE
if [ ! -e /usr/local/bin/system/old_month ]; then
# CREATE IT IF IT DOESN'T EXIST WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month
fi
# CREATE A NEW FILE EVERY TIME THIS SCRIPT IS RUN WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/this_month
# CHECK IF OLD_MONTH AND THIS_MONTH ARE NOT THE SAME
if ! cmp /usr/local/bin/system/this_month /usr/local/bin/system/old_month > /dev/null 2>&1 ;
then
# RUN YOUR RELEVANT CODE HERE #
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month # UPDATE THE VALUE IN OLD_MONTH SO THAT THEY WILL MATCH NEXT TIME
fi
承認された回答:
これにはAnacronを使用できます。これは、システムが継続的にオンになっていると想定せずに、特定の間隔でジョブを実行するように設計されています。ジョブが毎月実行されることになっている場合、Anacronは前月に実行されたかどうかを確認し、実行されていない場合は実行します(さらに、別の月に再度実行する必要がないことを忘れないでください)。
Debian派生物では、AnacronはCronとうまく連携して、/etc/cron.{daily,weekly,monthly}
を処理します。 適切に(したがって、毎月のタスクを/etc/cron.monthly
で毎月のジョブとして定義するだけです。 、適切に実行されます。
他のシステムでは、毎月のタスクを/etc/anacrontab
で定義します。 。