はじめに
cronはchronograph(クロノグラフ)の略で、指定した日付や時刻に、または一定の間隔で、スクリプトの実行、プログラムの開始、ニュースレターの送信、データベースのバックアップ、メッセージの表示、不要なファイルの削除などを行うために使われるプロセスです。一般に、コンピュータで自動的に実行されるプロセスはすべてcronです。本稿では、PHPスクリプトをcronとして実行する方法を説明します。
PHPのcronとLinux
Linuxには、特定の周期で実行されるプロセスを管理するための便利な手段として、cronデーモン(crond)が用意されています。ユーザーは、実行するスクリプトやコマンドを「crontab」ファイルで定義します。crontabファイルには、時系列で実行される一連のタスクが記述され、1行が1つのエントリを表します。各エントリには、タスクの実行方法(スクリプトを実行するなど)に関する情報が指定されます。これらの個々のタスクを「cronジョブ」と呼びます。
crontabファイルはユーザーごとに作成されるので、各ユーザーが独自のcronを実行できます。
crontabファイルを操作するには、次の構文を使います。
# crontab [--e [-u username] | -l [-u username] | -r [-u username] | file]
引数-e
は、デフォルトのエディタ(viなど)を使ってファイルを編集することを意味します。編集が終わると、ファイルは現在のユーザーのcrontabファイルとして「cron」ディレクトリにインストールされます。crontabファイルが既に存在する場合は上書きされます。引数-l
は、ファイルの内容を表示します。引数-r
は、「crontab」ディレクトリからファイルを削除します。
引数-u
(username)の後ろのusernameは省略可能ですが、どのユーザーのcrontabファイルを操作するかを指定します。例えば、rootユーザーはusernameを使って、特定のcrontabファイルの所有者を指定できます。username引数を指定しない場合は、現在のユーザーのcrontabファイルが操作対象になります。無効なusername引数を指定した場合は、コマンドを実行するとエラーが発生します。
file引数は、指定したファイルの内容でcrontabファイルを置き換えます。置き換えるファイルの内容がcronデーモンの書式と一致していないと、crontabコマンドが正しく動作しません。
crontabファイルの構文
このファイルの構文はとても重要です。構文の記述を誤ると、crontabは正しく機能しません。ファイルの各行には、表1に示す6つのフィールドを1つずつ順番に記述する必要があります。各行の区切りには改行文字を使います。
フィールド | 説明 |
---|---|
分 | 0~59の数値 |
時 | 0~23の数値 |
日 | 1~31の数値 |
月 | 1~12の数値 |
曜日 | 0~6の数値(0は日曜日、6は土曜日) |
コマンド | 実行するスクリプト名またはコマンド |
最初の5つのフィールドの内容は、次のようにいくつかの方法で設定できます。
- 1つの数値で設定する
例えば、「分」フィールドを6
に設定すると、スクリプトは毎時6分に実行されます。 - 範囲で設定する
例えば、「時」フィールドを2+9
に設定すると、スクリプトは午前2:00から午前9:00まで毎時間実行されます。 - コンマ区切りの値のリストで設定する
例えば、「時」フィールドを2,5,9
に設定すると、スクリプトは午前2:00、午前5:00、および午前9:00に実行されます。 - アスタリスク(
*
)で設定する
アスタリスクは、そのフィールドのすべての値に一致するワイルドカードです。 - アスタリスクと値で設定する
例えば、「分」フィールドを*/5
に設定すると、スクリプトは5分おきに実行されます。
6番目の「コマンド」フィールドには、実行するスクリプト名またはコマンドを指定します。
これら必須のフィールドのほかに、必要に応じて次のオプションの引数を使って、ログファイルやエラーファイルを生成することもできます。
- ログファイル
二重の右向き山かっこ(>>
)とログファイル名を使ってログファイルを指定します(例:>>cron.log
)。 - エラーファイル
プレフィックス(2>>
)とエラーファイル名を使ってエラーファイルを指定します(例:2>>cron.err
)。