はじめに
Linux では、繰り返し実行するタスクを自動化することが、システムのメンテナンスに欠かせません。毎日のバックアップ、一時ファイルの削除、週次レポートの生成などの処理は、Cron というシステムユーティリティで実行できます。
Cron は、時刻を基準にジョブを実行するスケジューラーです。専用の設定構文を使って、コマンドを実行する正確なタイミングを指定します。この設定テーブルは、一般に「crontab」と呼ばれます。
Cron は何十年にもわたって Unix の文化に組み込まれてきました。最新のワークフロープラットフォームやクラウドスケジューラーが登場するずっと前から、管理者は cron を使って、バックアップ、クリーンアップ、レポート作成、メンテナンスなどの処理を決まった時刻に実行していました。
0 2 * * * のような crontab エントリは、最初は分かりにくいかもしれません。この実験では、この構文を読み取り、記述する方法を学びます。次の内容に取り組みます。
- システムの crontab を確認する:グローバルな cron 設定ファイルを表示します。
- 構文を読み解く:時刻と日付を指定する 5 つのフィールドを理解します。
- スケジュールを作成する:毎日実行するタスク用の有効な 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 つのフィールドを記述します。
- Minute(分)(0~59)
- Hour(時)(0~23、24 時間形式)
- Day of Month(月の日)(1~31)
- Month(月)(1~12)
- 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 つのフィールドに分けて考えます。
- Minute(分):正確に 2:00 に実行するため、0 分を指定します。値は
0です。 - Hour(時):午前 2 時を指定します(24 時間形式)。値は
2です。 - Day of Month(月の日):毎月、すべての日に実行します。値は
*です。 - Month(月):1 年のすべての月に実行します。値は
*です。 - Day of Week(曜日):曜日に関係なく実行します。値は
*です。
これらを組み合わせると、式は 0 2 * * * になります。
この構文をファイルに追記します。
echo "0 2 * * *" >> cron_syntax.txt
記述したエントリを確認します。
cat cron_syntax.txt
この構文 0 2 * * * は、システムに「分が 0 かつ時が 2 のとき、コマンドを実行する」と指示します。
次の考え方を覚えておいてください。cron は現在時刻を 5 つのフィールドすべてと照合します。現在時刻がパターンに一致すると、cron はジョブを起動します。
まとめ
この実験では、cron によるスケジューリングの基本を学びました。
- システム設定:
/etc/crontabを確認し、標準的な構成を確認しました。 - フィールド構造:Minute(分)、Hour(時)、Day of Month(月の日)、Month(月)、Day of Week(曜日)の 5 つのフィールドを確認しました。
- 式の記述:毎日実行するジョブ用の構文(
0 2 * * *)を作成しました。
この構文を理解することは、Linux 環境で定型タスクを自動化するうえで重要です。



