LinuCレベル1 102試験の例題と解説
1.08.2ジョブスケジューリング
LinuCレベル1 102試験の出題範囲から「1.08.2 ジョブスケジューリング」についての例題を解いてみます。ここでは、anacronについて確認しておきましょう。
例題
anacronの説明として、誤っているものを1つ選択してください。
- ジョブの実行間隔は、日単位でのみ指定ができる
- システムの停止中に実行されるはずだったジョブは、システムを起動しても実行されない
- ジョブの実行時間を、任意に遅らせる設定ができる
- ジョブが実行可能な時間帯を指定することができ、その時間帯以外ではジョブは実行されない
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「2. システムの停止中に実行されるはずだったジョブは、システムを起動しても実行されない」です。
anacronとは、ジョブを定期的に実行することができるものです。cronもジョブを定期的に実行することができますが、大まかに以下の点で異なります。
- ジョブの実行間隔は日単位でのみ指定できる
- ジョブの実行前に遅延時間を設定して、ジョブの実行時間を遅らせることができる
- ジョブが実行可能な時間帯を指定することができる
- ジョブの実行時にシステムが停止していた場合、システムが起動した後に実行されなかったジョブを実行する
なお、cronによってanacronを定期実行しているディストリビューションが多いです。cronの特徴については割愛しますが、別途確認しておきましょう。
anacronは、前回のジョブの実行日時を記録し、ジョブの実行間隔を計算するという特徴があります。これにより、システムの停止などで実行タイミングを逃したジョブを検知し、システムの復帰時に実行することができます。そのため、定期的に停止するシステムでは、anacronを使用することがあります。
anacronは/etc/anacrontabにジョブの定期実行の設定を行います。
/etc/anacrontabの設定例は以下の通りです。
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45 -------------------------------------------------------------- ①
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22 ------------------------------------------------------- ②
#period in days delay in minutes job-identifier command ---------------- ③
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
上記の設定の重要箇所に番号を振りました。
以下で、それぞれの解説を行います。
①RANDOM_DELAY
ジョブの実行前の最大遅延時間を分単位で指定することができます。
設定例の場合、ジョブの実行前に0分から45分の間でランダムな遅延(分)が入ります。0を指定した場合、ジョブは遅延することなく実行されます。
②START_HOURS_RANGE
ジョブを実行可能な時間帯を指定します。
設定例の場合、3:00から22:00の間でジョブを実行できます。なお、範囲の終了の時間は、実行可能な時間に含まれない仕様となっています。そのため、3:00にはジョブを実行できますが、22:00にはジョブを実行できません。
③ジョブの定期実行の設定
ジョブの定期実行は以下の項目で設定を行います。
- period in days
ジョブの実行間隔を日単位で指定します(3を指定した場合、3日間隔)。
数字以外に、次の値を指定することができます。
@daily: 1日間隔で実行します
@weekly: 7日間隔で実行します
@monthly: 月の日数に依らず、毎月1回実行します
- delay in minutes
ジョブの実行前の遅延時間を、分単位で指定することができます。
①RANDOM_DELAYで指定した遅延時間と、ここで指定した遅延時間の合計が、実際にジョブの実行前に遅延する時間になります。
- job-identifier
ログに出力するジョブ名を指定します。
- command
実行するコマンドを指定します。
注意点として、ジョブの実行時間の判定には遅延時間が考慮されるという挙動があります。例えば、3:00から22:00の間にジョブが実行可能であるとします。この場合、2:00に起動したanacronではジョブの実行ができません(範囲外のため)。しかし、ジョブの遅延時間の設定により1時間を超える遅延が発生すると、実行可能な時間帯(3:00から22:00)の範囲に収まるため、ジョブを実行できます。
例題の選択肢について解説します。
1. ジョブの実行間隔は、日単位でのみ指定ができる
正しい説明です。
2. システムの停止中に実行されるはずだったジョブは、システムを起動しても実行されない
誤った説明です。
anacronはジョブの実行日時を記録し、ジョブの実行間隔を計算します。そのため、システムが停止している間に実行されるはずだったジョブは、システムの起動後に実行されます。
3. ジョブの実行時間を、任意に遅らせる設定ができる
正しい説明です。
4. ジョブが実行可能な時間帯を指定することができ、その時間帯以外ではジョブは実行されない
正しい説明です。
anacronは、ジョブの実行日時を記録することができる、ジョブに遅延時間を設けることができるなど、様々な特徴があります。cronとの違いを理解して、使い分けられるようにしておきましょう。
例題作成者
株式会社デージーネット 経営企画室 宮地 智哉