LinuCレベル1 102試験の例題と解説
主題1.08システム管理
1.08.2ジョブスケジューリング
LinuCレベル1 102試験の出題範囲から「1.08.2 ジョブスケジューリング」についての例題を解いてみます。
ここでは、cronを使用したジョブの定期実行について解説します。
例題
システムの特定のログを定期的にバックアップするため、「/usr/local/bin/backup.sh」というログバックアップ用スクリプトを作成し、手動で「/etc/cron.d/backup」に以下の定期実行設定を行いました。
# LOG BACKUP
30 2 * * * /usr/local/bin/backup.shしかし、該当の時間になってもバックアップされておらず、そもそもbackup.shが動いた様子がありませんでした。このジョブが動作しない原因として最も適切なのはどれでしょうか?
- /etc/cron.d以下のファイルにはファイル拡張子「.cron」が必要である
- /etc/cron.d以下のファイルは「crontab -e」コマンドで編集する必要がある
- /etc/cron.d以下のファイルにはユーザ名フィールドが必要である
- /etc/cron.d以下のファイルにはコメント行を含めてはならない
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「3. /etc/cron.d以下のファイルにはユーザ名フィールドが必要である」です。
Linuxでは、cronを用いることでジョブを定期的に実行することができます。
ユーザのcrontabでは、ユーザごとに別々のジョブを設定して定期実行させることができます。個人の作業用ジョブを登録するケースでは、こちらを用いるのが適切です。
ユーザのcrontabの書式は次の通りです。
分 時 日 月 曜日 コマンド例として、testuserユーザで毎日12時に「/home/testuser/sendmail.sh」スクリプトを実行する場合、testuserユーザにて
$ crontab -eを実行し、開かれたエディタ内に
0 12 * * * /home/testuser/sendmail.shと記載して保存します。注意すべきこととして、ユーザのcrontabは直接編集してはいけません。編集は「crontab -e」コマンドを介して行う必要があります。
一方で、システム管理用のジョブなどを定期実行したい場合は、/etc/cron.d以下にファイルを作成し、その中にジョブの定期実行設定を行うのが適切です。
/etc/cron.d以下に設定する際の書式は次の通りです。
分 時 日 月 曜日 ユーザ コマンドユーザのcrontabとは違い、コマンドを実行するユーザを明確に指定する必要があります。
例として、rootユーザで毎日2時30分に「/usr/local/bin/backup.sh」スクリプトを実行する場合、rootユーザにて/etc/cron.d以下のファイル(例: /etc/cron.d/backup)をエディタで開き、
30 2 * * * root /usr/local/bin/backup.shと記載して保存します。
例題の選択肢について解説します。
1. /etc/cron.d以下のファイルにはファイル拡張子「.cron」が必要である
誤りです。
/etc/cron.dのファイルに拡張子は必要ではありません。
2. /etc/cron.d以下のファイルは「crontab -e」コマンドで編集する必要がある
誤りです。
「crontab -e」コマンドを使うのは、ユーザ用のcrontabにジョブを設定する場合であり、/etc/cron.dのファイルは直接編集するものです。
3. /etc/cron.d以下のファイルにはユーザ名フィールドが必要である
正しいです。
/etc/cron.dのファイルは、ユーザ用のcrontab(crontab -e)とは異なり、必ずユーザ名フィールドが必要です。
「分 時 日 月 曜日 ユーザ名 コマンド」の書式で設定します。
4. /etc/cron.d以下のファイルにはコメント行を含めてはならない
誤りです。
「#」によるコメントはもちろん、空行も使用できます。
今回はcronを使用したジョブの定期実行について解説しました。定期実行したいジョブが、個人的なものなのか、システム管理用なのかも考慮したうえで、適切に設定できるようにしましょう。
例題作成者
株式会社デージーネット 経営企画室 小倉崇志