このページでは、cronによるスクリプトの定期実行処理を設定する方法を説明します。
サービスの起動
CentOSの初期設定では、cronはサービス自動起動が有効化されているので、手動での起動は不要です。
自動起動が無効化されている環境では、以下のコマンドを入力し、自動機能の有効化とサービス起動を行います。
# systemctl enable crond
# systemctl start crond
設定変更
設定ファイルの場所
cronの設定ファイルは、目的別に大きく3つに分類できます。それぞれ、設定ファイルを配置するディレクトリが定められています。
標準の定期実行処理
毎時間、毎日、毎週、毎月実行したい処理を、それぞれ以下のディレクトリに設定ファイルを配置します。
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
カスタムcrontab
標準の定期実行処理とは異なる処理条件を定義したい場合は、以下のディレクトリにcrontabと呼ばれる設定ファイルを配置します。
/etc/cron.d
ユーザ別crontab
用途は/etc/cron.d
と似ていますが、ユーザごとに実行したい定期処理を定義する場合、以下のディレクトリに設定ファイルを配置します。設定ファイル名は、実行したいユーザ名と同じ文字列となります。
なお、このディレクトリに設定ファイルを配置すると管理が煩雑になるため、/etc/cron.d
の設定ファイルで実行ユーザも含めて処理を定義したほうがよいでしょう。
/var/spool/cron
設定ファイルの内容
cronは設定ファイルの種類ごとに書式が異なるので注意が必要です。
標準の定期実行処理
定期実行処理は、設定ファイルディレクトリに配下にシェルスクリプトを配置します。
シェルスクリプトはrootユーザで実行されます。
なお、シェルスクリプトのファイルには実行権限が必要となります。
カスタムcrontab
カスタムcrontabは、拡張子を付けないファイル名で/etc/cron.d
の配下に配置します。
ファイルの権限は644、所有権はrootにします。
ファイルには、以下の形式で実行間隔と実行ユーザ、実行内容を指定します。
分、時、日は、数字で実行間隔を指定します。
曜日は、日曜日〜金曜日を0〜6で表現します。
実行内容は、シェルのコマンドでも、別スクリプトファイルの呼び出しでも構いません。
<分> <時> <日> <月> <曜日> <実行ユーザ> <実行内容>
実行間隔の各パラメータは、色々な指定方法があります。
以下は分にパラメータを指定した例です。時、日、曜日もそれぞれ同じ考え方ができます。
- * : 毎分実行
- 5 : 毎時間の5分に実行
- */5: 5分おきに実行
- 1-5: 毎時間の1、2、3、4、5分にそれぞれ実行
- 0,30: 毎時間の0分と30分に実行
crontabには、変数名=値
の形式で必要に応じて環境変数を指定することができます。
デフォルト値で問題なければあえて指定する必要はありませんが、要件がある場合は指定します。
- SHELL: 処理実行シェルのパス(デフォルトは、/bin/sh)
- USER: 処理実行ユーザ(デフォルトは、root)
- PATH: 処理実行時のコマンドサーチパス(デフォルトは、/usr/bin:/bin)
- PWD: 処理実行時のカレントディレクトリ(デフォルトは、/root)
- HOME: 処理実行時のホームディレクトリ(デフォルトは、/root)
- LANG: 処理実行時の出力言語(デフォルトは、ja_JP.UTF-8(日本語環境の場合))
- MAILTO: 処理結果メール送信先ユーザまたはメールアドレス(デフォルトは、空欄)
以下は、1時間ごとに時刻とシステム負荷状態をファイルに出力する処理の例です。
### /etc/cron.d/collect-stats ###
SHELL=/bin/bash
LANG=C
0 * * * * root date;vmstat >> /tmp/collect-stats.log
ユーザ別crontab
ユーザ別crontabのファイルを直接編集することは推奨されていません。
以下のコマンドで、エディタを起動します。
標準ではviが起動するので、ファイルを編集後:wq
で保存します。
# crontab -u <ユーザ名> -e
設定内容の反映
前述の各種設定ファイルは、編集すると自動的に処理内容がcronに認識されます。サービスの再起動は不要です。