ウェブサイト検索

Cron と Anacron: Linux で Anacron を使用してジョブをスケジュールする方法


この記事ではcronanacron について説明し、Linux で anacron をセットアップする方法も示します。これら 2 つのユーティリティの比較についても説明します。

指定された時間または後の時間にタスクをスケジュールするには、「at」または「batch」コマンドを使用できます。繰り返し実行するコマンドを設定するには、クロンおよびアナクロン機能。

Cron – システム バックアップ、アップデートなどのスケジュールされたタスクを実行するために使用されるデーモンです。サーバーなど、24 時間 365 日継続的に実行されるマシン上でスケジュールされたタスクを実行するのに適しています。

コマンド/タスクは、crontab ファイルでスケジュールされた cron ジョブにスクリプト化されます。デフォルトのシステム crontab ファイルは /etc/crontab ですが、各ユーザーは、ユーザーが定義した時間にコマンドを起動できる独自の crontab ファイルを作成することもできます。

個人用の crontab ファイルを作成するには、次のように入力します。

crontab -e

Linux で Anacron をセットアップする方法

Anacron は、日単位で定義された頻度でコマンドを定期的に実行するために使用されます。 cron とは動作が少し異なります。マシンの電源が常にオンになっていないことを前提としています。

これは、ラップトップやデスクトップ マシンなど、24 時間 365 日稼働しないマシン上で、通常は cron によって実行される日次、週次、月次のスケジュールされたジョブを実行するのに適しています。

スケジュールされたタスク (バックアップ スクリプトなど) を cron を使用して毎深夜 (おそらく睡眠時間) に実行するように設定しており、その時間までにデスクトップやラップトップの電源がオフになっているとします。バックアップ スクリプトは実行されません。

ただし、anacron を使用すると、次回デスクトップ/ラップトップの電源を再度オンにしたときに、バックアップ スクリプトが確実に実行されます。

Linux での Anacron の仕組み

anacron ジョブは /etc/anacrontab にリストされており、以下の形式を使用してジョブをスケジュールできます (anacrontab ファイル内のコメントは # で始まる必要があります)。

period   delay   job-identifier   command

上記の形式から:

  • 期間 – これは日単位で指定されるジョブの実行頻度、または @daily、@weekly、または @monthly として 1 日、1 週間、または 1 か月に 1 回指定されます。 1 – 毎日、7 – 毎週、30 – 毎月、N – 日数などの数字を使用することもできます。
  • 遅延 – ジョブを実行するまでに待機する分数です。
  • ジョブ ID – ログ ファイルに書き込まれるジョブの固有の名前です。

サンプル ファイルを表示するには、次のように入力します。

ls -l /var/spool/anacron/

total 12
-rw------- 1 root root 9 Jun  1 10:25 cron.daily
-rw------- 1 root root 9 May 27 11:01 cron.monthly
-rw------- 1 root root 9 May 30 10:28 cron.weekly
  • コマンド – 実行するコマンドまたはシェル スクリプトです。
実際には次のようなことが起こります。
  • Anacron は、期間フィールドで指定された期間内にジョブが実行されたかどうかを確認します。そうでない場合は、遅延フィールドに指定された分数待機した後、コマンドフィールドに指定されたコマンドが実行されます。
  • ジョブが実行されると、ジョブ ID (タイムスタンプ ファイル名) フィールドで指定された名前を持つ /var/spool/anacron ディレクトリ内のタイムスタンプ ファイルに日付が記録されます。

例を見てみましょう。これにより、/home/aaronkilik/bin/backup.sh スクリプトが毎日実行されます。

@daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh

backup.sh ジョブの実行が予想されるときにマシンがオフの場合、anacron はマシンの電源がオンになってから 10 分後にジョブを実行します。さらに 7 日間待つ必要はありません。

anacrontab ファイルには、理解する必要がある 2 つの重要な変数があります。

  • START_HOURS_RANGE – ジョブが開始される時間範囲を設定します (つまり、次の時間内にのみジョブを実行します)。
  • RANDOM_DELAY – これは、ジョブのユーザー定義の遅延に追加される最大ランダム遅延を定義します (デフォルトでは 45)。

これは、anacrontab ファイルがどのように見えるかです。

/etc/anacrontab: configuration file for anacron

See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root

These replace cron's entries
1       5       cron.daily      run-parts --report /etc/cron.daily
7       10      cron.weekly     run-parts --report /etc/cron.weekly
@monthly        15      cron.monthly    run-parts --report /etc/cron.monthly

@daily    10    example.daily   /bin/bash /home/aaronkilik/bin/backup.sh                                                                      

以下は、どちらをいつ使用するかを理解するために、cronanacron の比較です。

It’s a daemon

デーモンではありません

Appropriate for server machines

デスクトップ/ラップトップマシンに適しています

Enables you to run scheduled jobs every minute

スケジュールされたジョブを毎日実行できるようにするだけです

Doesn’t executed a scheduled job when the machine if off

スケジュールされたジョブの期限になったときにマシンがオフになっている場合、次回マシンの電源がオンになったときにスケジュールされたジョブが実行されます。

Can be used by both normal users and root

それ以外の場合を除き、root のみが使用できます (特定の構成を持つ通常のユーザーに対して有効)

cronanacron の主な違いは、anacron が意図されているのに対し、cron は継続的に実行されるマシン上で効果的に動作することです。 1 日または 1 週間以内に電源がオフになるマシンの場合。

他の方法をご存知の場合は、下のコメント フォームを使用して共有してください。