cronサービス
Linuxでは、定期的に実行されるタスクは通常、cronというデーモンによって処理されます。オペレーティングシステムをインストールすると、このサービスツールがデフォルトでインストールされ、自動的に起動します。crondプロセスは毎分定期的にチェックを行い、実行すべきタスクがあればそれを実行します。
cronサービスの最小実行単位は1分です。つまり、cronサービスは毎分設定ファイルを読み込むため、秒単位でのタスク実行はできません。
cronサービスの起動と停止
CronはLinuxの組み込みサービスなので、以下のコマンドを使用してサービスを開始、停止、再起動、または設定をリロードできます:
/sbin/service crond start // サービスを開始
/sbin/service crond stop // サービスを停止
/sbin/service crond restart // サービスを再起動
/sbin/service crond reload // 設定をリロード
cronタスクファイル(設定ファイル)
cronは3つの場所から設定ファイルを読み込みます。これらのファイルはcrontabファイルと呼ばれ、コマンドラインとその実行時刻が含まれています。
-
/etc/crontab (システムレベルのタスク) このファイルにはシステムレベルのタスクが含まれており、主に毎日、毎週、毎月のタスクのために使用されます。通常、ここにはユーザーの独自のタスクは配置しません。
-
/etc/cron.d/ このディレクトリにはシステムレベルのタスクの設定ファイルが配置されます。
-
/var/spool/cron/ (ユーザーごとのタスク) このディレクトリには各ユーザーのタスクファイルが配置されます。各ユーザーのタスクは、ユーザー名と同じ名前のファイルに保存されます。このファイル内の命令行にはユーザー指定はありません。
cronログファイル
/var/log/cron ファイルを確認することで、タスクの実行状況を確認できます。
cronタスクファイルの編集
- 上記の3つの場所にある関連するcrontabファイルを直接編集できます。
crontab -eコマンドを使用して編集することもできます。
crontab -e を使用して編集すると、実際には /var/spool/cron/ ディレクトリ内の現在のユーザーまたは指定されたユーザー(-uオプションを使用)のcrontabファイル(ユーザー名と同じ名前)が編集されます。
- また、スクリプトファイルを作成し、それをcrontabに追加することも可能です。例えば、cronスクリプトを
testFile.cronとして作成し、その内容を/etc/crontabファイルの注釈形式と同じように記述し、crontab testFile.cronを実行します。
crontabコマンドオプション
crontab [-u user] file
crontab [-u user] [-e | -l | -r]
-u user: 特定のユーザーのcrontabを設定します。通常、rootユーザーがこのオプションを使用します。指定しない場合は、現在ログインしているユーザーが対象となります。file: 命令ファイルの名前で、このファイルがcrontabのタスクリストとして読み込まれます。指定しない場合、キーボードからの入力を受け付けます。-e: 現在のユーザーのcrontabファイルを編集モードで開きます。-l: 現在のユーザーのcrontabファイルに設定されているタスクを表示します。-r: 現在のユーザーのcrontabファイルを削除します。-uオプションを使用して特定のユーザーのファイルを削除することもできます。-i: crontabファイルを削除する前に確認を求めます。
crontab –e : /var/spool/cron ディレクトリ下の現在のユーザーのcrontabファイルを編集します。ファイルが存在しない場合は自動的に作成され、ファイル名はユーザー名と同じになります。-uオプションを使用して特定のユーザーのcrontabファイルを編集することもできます。
crontab –l : 現在のユーザーのcrontabファイルに設定されているタスクを表示します。-uオプションを使用して特定のユーザーのファイルを表示することもできます。
crontab -r : 現在のユーザーのcrontabファイルを削除します。-uオプションを使用して特定のユーザーのファイルを削除することもできます。
crontab -ir : crontabファイルを削除する前に確認を求めます。
crontabファイルの構文と書式
各行には6つのフィールドがあり、最初の5つはコマンドが実行される時間を指定し、最後の1つは実行されるコマンドを指定します。
各フィールドはスペースまたはタブで区切られます。
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
- minute: 0 - 59
- hour: 0 - 23
- day-of-month: 1 - 31
- month: 1 - 12 (1は1月, 12は12月)
- day-of-week: 0 - 7 (0または7は日曜日)
時間フィールドには、以下のシンボルも使用できます:
- 星号(*):すべての可能な値を表す
- 逗号(,):複数の値を指定する
- 中杠(-):整数範囲を指定する
- 正斜线(/):時間間隔を指定する
crontab表現式では、最初の4つのフィールドはAND関係で、全て満たさなければなりません。しかし、曜日フィールドはOR関係で、どちらか一つが満たされれば実行されます。
例:
- 毎分実行:
* * * * * - 毎時0分に実行:
0 * * * * - 毎日0時0分に実行:
0 0 * * * - 毎週日曜日の0時0分に実行:
0 0 * * 0 - 毎月1日の0時0分に実行:
0 0 1 * * - 毎年1月1日の0時0分に実行:
0 0 1 1 * - 5分おきに実行:
*/5 * * * * - 2時間ごとに実行:
0 */2 * * * - 3日ごとに実行:
0 0 */3 * * - 3ヶ月ごとに実行:
0 0 1 */3 * - 毎時10分と15分に実行:
10,15 * * * * - 毎日1時と3時に実行:
0 1,3 * * * - 毎月1日と3日に実行:
0 0 1,3 * * - 毎年1月と3月に実行:
0 0 1 1,3 * - 毎年1月から3月に実行:
0 0 1 1-3 *
/etc/crontabについて
cronの主な設定ファイルは /etc/crontab であり、以下のような内容を持っています:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# 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
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
最初の4行はcronタスクの実行環境を設定する変数です:
- SHELL: 使用するシェル環境(デフォルトはbash)
- PATH: コマンドを実行するプログラムのパス
- MAILTO: cronタスクの出力を送信するメールアドレス
- HOME: コマンドやスクリプトを実行する際に使用するホームディレクトリ
/etc/crontabファイルの run-parts 部分では、/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly ディレクトリ内にあるスクリプトがそれぞれ時間に基づいて実行されます。これらのディレクトリ内のファイルはシェルスクリプトで、実行権限が必要です。
特定のスケジュールで実行する必要があるcronタスクは、/etc/cron.dディレクトリに追加することができます。このディレクトリ内のファイルは、/etc/crontabと同じ構文を使用します。