毎月実行するには特定のスクリプトが必要です(この質問を見ている他のユーザーは、毎日/毎週/1年/5日などを実行する必要があるかもしれません)。
cronを使用してこれを行うことができることを知っています。
0 0 1 * * ./script.sh
しかし、その期間中にマシンがオフラインの場合(たとえば、特定の月の1日に停電した場合)はどうなりますか?
一つありますか?エレガントこの問題を解決しますか?または、値を設定するためにそのスクリプトにサブルーチンを含めてから、毎月I've-run-this-month-already
毎日(または起動時に)別のスクリプトを実行して値を確認する必要がありますか?
修正する:
毎月初めに一度スクリプトを実行する必要があります。いくつかのタスクを実行するためのスクリプトの作成中に以下のコードを作成しました。誰かがこの質問を見つけた後に役に立つと思う場合に備えて、ここに入れます。
# 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
ベストアンサー1
あなたはそれを使用することができますアナクロンこのため、システムが継続的に実行されることを想定せずに特定の間隔でジョブを実行するように設計されています。タスクを月に一度実行する必要がある場合は、Anacronは前月に実行されたことを確認し、そうでない場合は実行します(そして翌月に再実行する必要はありません)。
Debian派生製品では、AnacronはCronとうまく機能し、適切に処理します/etc/cron.{daily,weekly,monthly}
(したがって、Cronで毎月のジョブを毎月のジョブとして定義すると/etc/cron.monthly
適切に実行されます)。
他のシステムでは、次の月ごとのジョブを定義できます。/etc/anacrontab
。