GNU/Linux >> Linux の 問題 >  >> Linux

スクリプトが一定期間に1回実行されるようにするための最良の方法は?

月に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で定義します。 。


Linux
  1. 「find-exec{};?」を実行する方法

  2. スクリプトを実行する方法??

  3. Bash スクリプトのインスタンスが 1 つだけ実行されるようにする最善の方法は何ですか?

  1. エイリアスによってシャドウされているコマンドを実行しますか?

  2. bash スクリプトをデーモンとして実行する

  3. Batch でリモート SSH コマンドをスクリプト化する最良の方法 (Windows)

  1. ソフトウェアがインストールされているかどうかを(スクリプトから)検出する最良の方法は?

  2. シェルスクリプトを常にルートとして実行する方法は?

  3. ユーザーとして引数を使用してスクリプトを実行しますか?