cron 構文を理解する

LinuxBeginner
オンラインで実践に進む

はじめに

Linux では、繰り返し実行するタスクを自動化することが、システムのメンテナンスに欠かせません。毎日のバックアップ、一時ファイルの削除、週次レポートの生成などの処理は、Cron というシステムユーティリティで実行できます。

Cron は、時刻を基準にジョブを実行するスケジューラーです。専用の設定構文を使って、コマンドを実行する正確なタイミングを指定します。この設定テーブルは、一般に「crontab」と呼ばれます。

Cron は何十年にもわたって Unix の文化に組み込まれてきました。最新のワークフロープラットフォームやクラウドスケジューラーが登場するずっと前から、管理者は cron を使って、バックアップ、クリーンアップ、レポート作成、メンテナンスなどの処理を決まった時刻に実行していました。

0 2 * * * のような crontab エントリは、最初は分かりにくいかもしれません。この実験では、この構文を読み取り、記述する方法を学びます。次の内容に取り組みます。

  1. システムの crontab を確認する:グローバルな cron 設定ファイルを表示します。
  2. 構文を読み解く:時刻と日付を指定する 5 つのフィールドを理解します。
  3. スケジュールを作成する:毎日実行するタスク用の有効な cron 式を作成します。

システムの Cron テーブルを表示する

cron 構文を理解するには、システム全体の設定ファイル /etc/crontab を確認するのが近道です。このファイルには通常、各フィールドの構成を説明するヘッダーが含まれています。

このファイルは、実際の設定ファイルであると同時に、学習用のリファレンスとしても役立ちます。cron 構文は簡潔で強力な一方、フィールドの順序を理解するまでは読み違えやすいため、多くの Linux システムではここにコメントが記載されています。

次のコマンドを実行して、ファイルを表示します。

cat /etc/crontab

出力の Example of job definition セクションを確認してください(行の内容はディストリビューションによって多少異なる場合があります)。

## .---------------- minute (0 - 59)
## |  .------------- hour (0 - 23)
## |  |  .---------- day of month (1 - 31)
## |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
## |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
## |  |  |  |  |
## *  *  *  *  * user-name command to be executed

この図から分かるように、cron のスケジュールは、実行するコマンドの前に 5 つのフィールドを記述します。

  1. Minute(分)(0~59)
  2. Hour(時)(0~23、24 時間形式)
  3. Day of Month(月の日)(1~31)
  4. Month(月)(1~12)
  5. Day of Week(曜日)(0~7、0 と 7 はどちらも日曜日を表します)

アスタリスク * は、「すべて」を表すワイルドカードです。たとえば Month フィールドの * は、「毎月」を意味します。

cron 式が簡潔なのは、各フィールドによってスケジュールの条件を絞り込むためです。5 つのフィールドを組み合わせることで、繰り返し実行する時点を表します。左から右に、分、時、日、月、曜日の順で読む習慣を早い段階で身につけることが重要です。

例として、17 * * * * は「毎日、毎時間の 17 分に」を意味します。

構文ファイルを準備する

構造を理解できたので、次はエントリの記述を練習します。

cron 式を下書きするためのテキストファイルを作成します。実際のシステムスケジューラーに追加する前に、この方法で練習するのが適切です。

cron エントリは単なるテキストですが、インストールすると実際の処理を実行します。先に式を別のファイルへ記述しておくと、自動化を有効にする前にスケジュールを検討できます。

プロジェクトフォルダーに移動していることを確認します。

cd ~/project

cron_syntax.txt という空のファイルを作成します。

touch cron_syntax.txt

ファイルが作成されたことを確認します。

ls -l cron_syntax.txt

毎日のスケジュール構文を記述する

「毎日午前 2:00」 に実行するタスク用の cron 式を作成してください。

この要件を 5 つのフィールドに分けて考えます。

  1. Minute(分):正確に 2:00 に実行するため、0 分を指定します。値は 0 です。
  2. Hour(時):午前 2 時を指定します(24 時間形式)。値は 2 です。
  3. Day of Month(月の日):毎月、すべての日に実行します。値は * です。
  4. Month(月):1 年のすべての月に実行します。値は * です。
  5. Day of Week(曜日):曜日に関係なく実行します。値は * です。

これらを組み合わせると、式は 0 2 * * * になります。

この構文をファイルに追記します。

echo "0 2 * * *" >> cron_syntax.txt

記述したエントリを確認します。

cat cron_syntax.txt

この構文 0 2 * * * は、システムに「分が 0 かつ時が 2 のとき、コマンドを実行する」と指示します。

次の考え方を覚えておいてください。cron は現在時刻を 5 つのフィールドすべてと照合します。現在時刻がパターンに一致すると、cron はジョブを起動します。

まとめ

この実験では、cron によるスケジューリングの基本を学びました。

  1. システム設定:/etc/crontab を確認し、標準的な構成を確認しました。
  2. フィールド構造:Minute(分)、Hour(時)、Day of Month(月の日)、Month(月)、Day of Week(曜日)の 5 つのフィールドを確認しました。
  3. 式の記述:毎日実行するジョブ用の構文(0 2 * * *)を作成しました。

この構文を理解することは、Linux 環境で定型タスクを自動化するうえで重要です。