InfraAcademy

InfraAcademy Blog

「30 2 * * 1」はいつ動く?LPIC-1のcron・at・systemdタイマーを、crontabの5つの欄から読む練習問題8問

著者: ryu | #Linux #LPIC #systemd
講座一覧を見る

Linux・ネットワーク・AWSなど、学びたい分野の講座を探せます

この記事を共有

こんにちは、インフラエンジニアのryuです。

今回は、LPIC-1の102試験で出題される、cronとatによるジョブのスケジュールを練習問題で確かめていきます。

cronは、決まった時間にコマンドを自動で動かす仕組みです。実務でもバックアップやログの整理などで毎日のように使われています。

ただ、試験では 30 2 * * 1 のような書式を見て、いつ動くかを答える問題がよく出ます。欄の順番を1つ取り違えるだけで答えが変わるので、なんとなく覚えていると失点しやすい分野です。

この記事では、出題範囲を確認したあと、crontabの欄の読み方、使えるユーザーの制限、at、systemdタイマーの順に整理し、最後に練習問題8問を解いてもらいます。

LPIC-1のcronはどこで出題される?

最初に、出題範囲を確認しておきましょう。

cronとatは、102試験(102-500)の主題107「管理タスク」の中にある、107.2「ジョブのスケジューリングによるシステム管理タスクの自動化」で出題されます。重みは4です。

LPIの公式の学習教材では、この項目で求められる知識として次の4つが挙げられています。

求められる知識 主なコマンド・ファイル
cronとatのジョブを管理する crontab /etc/crontab /etc/cron.d/ at atq atrm
cronとatを使えるユーザーを設定する /etc/cron.allow /etc/cron.deny /etc/at.allow /etc/at.deny
systemdのタイマーユニットを理解する .timer ファイル、systemctl list-timers
systemd-run を使う 一時的なタイマーを作って、あとでコマンドを動かす

cronは「くり返し動かす」、atは「1回だけ動かす」と分けて覚えておくと、問題文を読んだときにどちらの話かすぐ判断できます。

crontabの基本的な設定手順は、crontabの設定方法の記事で詳しく解説しています。この記事では、試験で問われる読み方と区別に絞って進めます。

crontabの5つの欄の読み方

cronの問題は、ほとんどがこの書式の読み方から始まります。

ユーザーのcrontabの1行は、時間を表す5つの欄と、実行するコマンドでできています。

# 分  時  日  月  曜日  コマンド
  30   2   *   *   1     /usr/local/bin/backup.sh

この例は、毎週月曜日の2時30分に backup.sh を動かす、という意味です。左から順に、次のように読みます。

欄 意味 書ける値
1番目 分 0〜59
2番目 時 0〜23
3番目 日 1〜31
4番目 月 1〜12(jan などの英語の略称も可)
5番目 曜日 0〜7(0 と 7 が日曜日。mon などの略称も可)

いちばん多い間違いは、1番目を「時」と読んでしまうことです。cronの欄は「分・時・日・月・曜日」の順で、小さい単位から並んでいると覚えておきましょう。

記号の意味(* と , と - と /)

欄には、数字だけでなく記号も使えます。試験に出るのは次の4つです。

記号 意味 例 例の読み方
* すべての値 時の欄が * 毎時
, 値を並べる 分の欄が 0,30 0分と30分
- 範囲 曜日の欄が 1-5 月曜日から金曜日
/ 間隔 分の欄が */15 15分ごと

組み合わせると、たとえば 0 9-17 * * 1-5 は「平日の9時から17時まで、毎時0分」という意味になります。

1つだけ注意したいのが、日の欄と曜日の欄の両方に値を書いたときです。crontabのマニュアルでは、両方が指定されていると、どちらか一方に合えば動くと説明されています。0 0 1 * 1 は「毎月1日で、しかも月曜日」ではなく、「毎月1日」と「毎週月曜日」の両方で動きます。

/etc/crontabとユーザーのcrontabの違い

cronの設定ファイルは1つではありません。試験では、どこに書くかで書式が変わる点がよく問われます。

場所 編集のしかた 書式
ユーザーのcrontab crontab -e で編集する 5つの欄 + コマンド
/etc/crontab rootがエディタで直接編集する 5つの欄 + 実行するユーザー名 + コマンド
/etc/cron.d/ の中のファイル rootがファイルを置く /etc/crontab と同じ(ユーザー名の欄がある)
/etc/cron.daily/ など スクリプトを置くだけ 書式はなく、置いたスクリプトが毎日(毎週・毎月)動く

システム全体の設定ファイルには、6番目にユーザー名の欄が入ります。ユーザーのcrontabにユーザー名を書くと、それがコマンドの一部として扱われてしまうので注意してください。

ユーザーのcrontabの中身は /var/spool/cron/ の下に保存されますが、このファイルを直接編集せず、crontab コマンドを使うのが決まりです。よく使うオプションは次のとおりです。

crontab -e          # 自分のcrontabを編集する
crontab -l          # 自分のcrontabの内容を表示する
crontab -r          # 自分のcrontabを削除する(確認なしで全部消えるので注意)
crontab -u alice -l # rootがaliceのcrontabを表示する

-e と -r はキーボードで隣どうしにあるので、打ち間違えると登録したジョブがすべて消えます。試験でも実務でも、-r の意味ははっきり覚えておきましょう。

cronとatを使えるユーザーを制限する

次は、cronやatを使えるユーザーを決めるファイルです。

/etc/cron.allow と /etc/cron.deny の関係は、次の表のように決まっています。

ファイルの状態 crontabを使えるユーザー
cron.allow がある cron.allow に書かれたユーザーだけ(cron.deny は見ない)
cron.allow がなく、cron.deny がある cron.deny に書かれていないユーザー全員
どちらもない 実装や設定によって異なる(rootだけ、または全員)

ポイントは、allow が deny より優先されることです。cron.allow があれば、そこに名前がないユーザーは、cron.deny に書かれていなくても使えません。

atも同じように /etc/at.allow と /etc/at.deny で制限します。at.allow・at.denyのマニュアルでは、どちらのファイルもないときはroot(スーパーユーザー)だけが使える、空の at.deny があるときは全員が使える、と説明されています。

atで1回だけ動かす

atは、指定した時刻に1回だけコマンドを動かす仕組みです。cronと違って、実行したら終わりです。

at 23:00                # 23時に動かすコマンドを入力する(Ctrl+Dで確定)
at now + 10 minutes     # 今から10分後
atq                     # 予約しているジョブの一覧(at -l と同じ)
atrm 3                  # ジョブ番号3を取り消す(at -d 3 と同じ)

at を実行すると、動かしたいコマンドを入力する画面になります。入力が終わったら Ctrl+D で確定します。

atのジョブを動かしているのは atd というデーモンです。ディストリビューションによっては最初から入っていないので、使えないときはパッケージが入っているか、atd が動いているかを確認してください。

似た名前のコマンドに batch があります。時刻を指定するのではなく、システムの負荷が下がったときにコマンドを動かします。

systemdのタイマーとsystemd-run

5.0の出題範囲には、cronの代わりに使えるsystemdのタイマーも含まれています。

タイマーは、.timer という拡張子のユニットファイルで定義します。同じ名前の .service ユニットを、決まった時刻やきっかけで起動する仕組みです。

systemctl list-timers               # 登録されているタイマーと、次に動く時刻の一覧
systemctl list-timers --all         # 止まっているタイマーも含めて表示する

# 一時的なタイマーを作り、30分後にコマンドを1回動かす
sudo systemd-run --on-active=30m /usr/local/bin/cleanup.sh

systemd-run は、ユニットファイルを書かずに、その場で一時的なサービスやタイマーを作るコマンドです。--on-active= で「今から何分後」を指定できるので、atに近い使い方ができます。

cronとsystemdタイマーのどちらを選ぶかという実務の話は、cronとsystemd timerの違いの記事で詳しく比べています。systemdのユニットやターゲットの基本があいまいな人は、systemdの練習問題も先に解いておくと、タイマーの話が理解しやすくなります。

今日やる練習:1分ごとに動くジョブを作って、消す

ここで一度、手を動かしてみましょう。練習用のLinuxで、次の順に打ってみてください。

# 1. 今のcrontabを確認する(何も登録していなければ、登録がないという表示になる)
crontab -l

# 2. crontab -e を開き、次の1行を書いて保存する
#    * * * * * date >> /tmp/cron-test.log

# 3. 2〜3分待ってから、ログに時刻が増えているか確認する
cat /tmp/cron-test.log

# 4. 確認できたら、crontab -e でさっきの行を消して保存する
crontab -l

1分ごとに時刻が1行ずつ増えていれば成功です。増えないときは、cronのデーモン(ディストリビューションによって cron または crond)が動いているかを systemctl status で確認してみてください。

最後に、登録した行を消すのを忘れないようにしましょう。ここで crontab -r を使うと、ほかに登録しているジョブもすべて消えてしまいます。

LPIC-1のcron・atの練習問題8問

ここまでの内容を、練習問題で確かめてみましょう。正解と解説は、各問題の下の引用にまとめています。

問題1:crontabの書式を読む

ユーザーのcrontabに次の行があります。このジョブが動くのはいつですか。

30 2 * * 1 /usr/local/bin/backup.sh
  • A. 毎日2時30分
  • B. 毎週月曜日の2時30分
  • C. 毎月1日の2時30分
  • D. 毎週火曜日の30時2分

正解:B 欄は左から「分・時・日・月・曜日」です。分が30、時が2、曜日が1(月曜日)なので、毎週月曜日の2時30分です。毎月1日にするには3番目の日の欄に1を書きます。

問題2:平日の日中に動かす

平日(月曜日から金曜日)の9時から17時まで、毎時0分にコマンドを動かしたいとき、時間の欄の書き方として正しいものはどれですか。

  • A. 0 9-17 1-5 * *
  • B. 9-17 0 * * 1-5
  • C. 0 9-17 * * 1-5
  • D. * 9-17 * * 1-5

正解:C 分が0、時が9から17、曜日が1から5です。Aは3番目の「日」に1-5を書いているので、毎月1日から5日の意味になります。Bは分と時が逆です。Dは分が * なので、9時台から17時台まで毎分動いてしまいます。

問題3:間隔の指定

分の欄に */15 と書いたときの意味として正しいものはどれですか。

  • A. 15分に1回だけ動く
  • B. 15分ごとに動く(0分・15分・30分・45分)
  • C. 毎時15分に動く
  • D. 15時に動く

正解:B / は間隔を表します。*/15 は、0〜59の範囲を15分ごとに区切るという意味です。毎時15分に1回だけ動かしたい場合は、分の欄に 15 と書きます。

問題4:ユーザー名の欄がある設定ファイル

時間の5つの欄とコマンドの間に、実行するユーザー名を書く必要があるファイルはどれですか。

  • A. crontab -e で編集するユーザーのcrontab
  • B. /etc/crontab
  • C. /etc/cron.allow
  • D. /etc/cron.daily/ に置いたスクリプト

正解:B /etc/crontab(と /etc/cron.d/ のファイル)はシステム全体の設定なので、6番目にユーザー名の欄があります。ユーザーのcrontabは、そのユーザーとして動くのでユーザー名の欄はありません。/etc/cron.daily/ にはスクリプトを置くだけで、書式はありません。

問題5:crontabの内容を表示する

自分のcrontabに登録されている内容を、変更せずに表示するコマンドはどれですか。

  • A. crontab -e
  • B. crontab -r
  • C. crontab -l
  • D. crontab -d

正解:C -l は表示、-e は編集、-r は削除です。-r は確認なしで自分のcrontabをすべて消すので、-e との打ち間違いに注意します。

問題6:cron.allowとcron.denyの優先順位

/etc/cron.allow には alice だけが書かれています。/etc/cron.deny には bob が書かれています。一般ユーザーの alice・bob・carol のうち、crontab コマンドを使えるのは誰ですか。

  • A. alice だけ
  • B. alice と carol
  • C. carol だけ
  • D. 3人とも使える

正解:A cron.allow があるときは、そこに書かれたユーザーだけが使えます。このとき cron.deny は見られないので、carol も cron.deny に書かれていないのに使えません。

問題7:atのジョブを取り消す

atq で確認したところ、取り消したいジョブの番号は3でした。このジョブを取り消すコマンドはどれですか。

  • A. atq -r 3
  • B. atrm 3
  • C. at -l 3
  • D. crontab -r 3

正解:B atのジョブは atrm にジョブ番号を指定して取り消します(at -d でも同じ)。at -l は atq と同じで、一覧を表示するだけです。

問題8:systemdのタイマーを確認する

systemdに登録されているタイマーと、それぞれが次に動く予定の時刻を一覧で確認するコマンドはどれですか。

  • A. systemctl list-timers
  • B. systemctl list-jobs
  • C. systemd-run --list
  • D. atq

正解:A systemctl list-timers は、タイマーユニットと次に動く時刻、前回動いた時刻を表示します。systemctl list-jobs は、いま実行中・待機中のsystemdのジョブ(起動や停止の処理)を表示するもので、タイマーの一覧ではありません。

8問のうち、何問正解できたでしょうか。間違えた問題は、その問題の書式を自分のcrontabに書いてみると、欄の順番が手で覚えられます。

InfraAcademyで、cronの練習を続ける

InfraAcademyでは、ブラウザ上で動くLinuxの練習環境で、コマンドを自分のPCを用意せずに試せます。crontab -l やファイルの確認など、今日の練習の前後にある基本操作をくり返すのに使ってみてください。

問題演習は、トップページのInfraAcademy の資格模擬問題から「(無料)LPICの練習問題で毎日トレーニング300問」を解いてみてください。cronの問題で迷ったら、書式を紙に書き出して「分・時・日・月・曜日」と1つずつ当てはめるくせをつけると、読み違いが減ります。

102試験のほかの範囲も練習問題で確かめたい人は、LPIC-1のプロセス管理の練習問題もあわせて解いてみてください。学ぶ順番はLinuxの学習ロードマップ、LPICの勉強全体の進め方はLPICの勉強方法にまとめています。

まとめ

今回は、LPIC-1の102試験で出題されるcron・at・systemdタイマーを、練習問題8問で確かめました。

  • crontabの欄は「分・時・日・月・曜日」の順で、小さい単位から並ぶ
  • 記号は *(すべて)、,(並べる)、-(範囲)、/(間隔)の4つ
  • /etc/crontab と /etc/cron.d/ には、ユーザー名の欄が入る
  • cron.allow があれば、そこに書かれたユーザーだけが使える
  • 1回だけ動かすならat。一覧は atq、取り消しは atrm
  • systemdのタイマーは systemctl list-timers で確認し、systemd-run で一時的に作れる

cronの書式は、読むだけより自分で1行書いて動かしたほうがずっと早く覚えられます。今日の練習で作ったジョブを消し忘れていないかだけ確認して、次の範囲に進んでいきましょう。

参考

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

株式会社InfraAcademy 代表 / エンジニア

大手メーカーでインフラエンジニアとして勤務した後、ベンチャー企業・スタートアップでフルスタックエンジニアを経験。その後、起業し学習サービス「InfraAcademy」を運営しています。
保有資格:ネットワークスペシャリストなど 運営会社:株式会社InfraAcademy

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る