cronは,Unix系OS(Linuxのような)で使用される,ジョブ(スクリプト)を自動実行するためのデーモンプロセスのこと。
Linuxや各種のサーバーで管理を行なう場合,ログのローテートや,バックアップ,定期的に自動実行したいジョブが数多くある。特に,バックアップなどはシステムへの負荷が大きいため,通常は,ユーザからのアクセスが少ない深夜や早朝に行なうようにすることが多い。
このように,定期的に実行されるジョブはcrondというデーモンによって,自動的に行なうように管理することが出来る。
crontab(クロンタブ)は,cronで管理される定時実行のスケジュール管理を行うために用いられるコマンドや定義ファイルのこと。
crontabには,各ユーザ毎の個人用の物と,システム全体用のものがある。もちろん,システム全体用の物は,システム管理者のみが編集可能になっている。
crontabファイルの各行は,空白またはタブで区切られたフィールド列から構成される特有の形式となっている。
フィールド中で複数の値を指定するには,いくつかの方法がある。
cron実装によっては,いくつかの追加拡張をおこなっているものもある。
# (行頭の # マークはコメント行を示す) # +------------ 分 (0 - 59) # | +---------- 時 (0 - 23) # | | +-------- 日 (1 - 31) # | | | +------ 月 (1 - 12) # | | | | +---- 曜日 (0 - 6) (日曜日=0) # | | | | | # * * * * * 実行されるコマンド
第6フィールド以降の行の残りの箇所に,実行すべきコマンドを指定する。
1 2 3 4 5 touch ~/error_`date "+%Y%m%d"`.txt
1 2 3 4 5 touch ~/right_$(date +\%Y\%m\%d).txt
59 1 1-7 4 0 /root/shift_my_times.sh
59 1 1-7 4 * test `date +\%w` = 0 && /root/shift_my_times.sh
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log
0 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log
0 */2 * * * date >> /var/log/date.log
/etc/crontabと,/etc/cron.d以下のものは,どちらもシステム全体用の設定ファイルである。
特徴は,前半の部分に実行時の環境変数を設定し,その後スケジュール設定,実行するコマンドというように記述する。
デフォルトは以下のようになっている。
/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
環境変数設定部分と,コマンドのスケジュールの部分とに分かれている。
注意することとして,環境変数,特にPATHを設定していることがある。つまり,ここに記述していないPATHにあるコマンドは実行できないことを意味する。
ログイン後のPATHに,実行PATHをいくら設定しておいても/etc/crontabで実行されるジョブでは,実行PATHとしては使用されないということ。(ユーザの環境変数を参照しない。)
#!/bin/sh SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ COMMAND=logger cron.d-test */3 * * * * root $COMMAND */15 * * * * root $COMMAND 18 * * * * root $COMMAND
新しくコメントをつける