CronとAnacron:LinuxでAnacronを使ってジョブをスケジュールする方法
この記事では、cronとanacronについて説明し、Linuxでanacronを設定する方法もご紹介します。また、これら2つのユーティリティの比較についても取り上げます。
指定した時間またはそれ以降にタスクをスケジュールするには、‘at’コマンドまたは‘batch’コマンドを使用できます。また、コマンドを繰り返し実行するように設定するには、cronおよびanacron機能を使用できます。
Cronは、システムバックアップや更新などのスケジュールされたタスクを実行するために使用されるデーモンです。24時間年中無休で動作するマシン、例えばサーバー上でスケジュールされたタスクを実行するのに適しています。
コマンド/タスクは、cronジョブとしてスクリプト化され、crontabファイルにスケジュールされます。デフォルトのシステム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は毎日、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 は、ジョブが期間フィールドに指定された期間内に実行されたかどうかを確認します。もし実行されていなければ、遅延フィールドに指定された分数だけ待った後、コマンドフィールドに指定されたコマンドを実行します。
- ジョブが実行されると、/var/spool/anacron ディレクトリ内のタイムスタンプファイルに、ジョブID(タイムスタンプファイル名)フィールドで指定された名前で日付が記録されます。
では、例を見てみましょう。これは/home/aaronkilik/bin/backup.shスクリプトを毎日実行します:
@daily 10 example.daily /bin/bash /home/aaronkilik/bin/backup.sh
もしマシンが backup.sh ジョブが実行される予定のときにオフであれば、anacronはマシンが電源オンになってから10分後にそれを実行し、さらに7日間待つ必要はありません。
anacrontabファイルには、理解しておくべき2つの重要な変数があります:
- 開始時間範囲 – これは、ジョブが開始される時間範囲を設定します(つまり、次の時間帯のみでジョブを実行します)。
- 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
以下は、cron と anacron の比較であり、どちらを使用するべきかを理解するのに役立ちます。
| クロノ | アナクロン |
|---|---|
| それはデーモンです | それはデーモンではありません |
| サーバーマシンに適しています | デスクトップ/ラップトップ用に適しています |
| 毎分スケジュールされたジョブを実行することができます | 日常的にスケジュールされたジョブを実行することのみを可能にします。 |
| マシンがオフの時にスケジュールされたジョブが実行されません | スケジュールされたジョブが実行される予定のときにマシンがオフになっている場合、次にマシンが電源オンになると、スケジュールされたジョブが実行されます。 |
| 一般ユーザーとルートの両方が使用できます | 特別な設定がない限り、ルートのみが使用できます(特定の設定で通常ユーザーに有効化される場合もあります) |
cronとanacronの主な違いは、cronが継続的に稼働するマシンで効果的に動作するのに対し、anacronは1日または1週間で電源が切れる可能性のあるマシンを対象としているということです。
他に方法をご存知でしたら、下のコメントフォームを使って私たちと共有してください。