名前
crontab - cron を駆動するための一覧表説明
crontab ファイルには cron(8) デーモンへの命令が 「この日付のこの時刻にこのコマンドを使用せよ」 という形式で書き込まれている。 ユーザはそれぞれ自分用の crontab を持っており、 各 crontab に与えられたコマンドは、 その crontab を所有しているユーザの権限で実行されることになる。 UUCP や News はたいていそれぞれの crontab を持っているので、 cron コマンドの一部で su(1) を明示的に実行する必要性はない。 空行および行頭のスペース・タブは無視される。 行先頭の空白以外の文字が # の行はコメント行であり、無視される。 cron コマンドとしての行に注釈としてのコメントを入れることはできない。 それらはコマンドの一部とみなされてしまう。 同様に、環境変数を設定している行にコメントを入れることはできない。 crontab の動作行は、 環境変数の設定か cronコマンドのいずれかである。 環境変数の設定は以下の形式をとる:name = value ただし、等号 (=) 両側のスペースはなくても良い。 value 内部の (先頭ではない) スペース文字は、値の一部として name に与えられる。 value 文字列は引用符で括ってもよい (シングルクォートでもダブルクォートでも良いが、 揃っている必要がある)。 こうすれば先頭や末尾の空白を値に渡すことができる。 value の文字列は、環境変数の置換のためにパースされることは ない 。したがって、
PATH = $HOME/bin:$PATH のような行は期待どおりの動作をしないだろう。 いくつかの環境変数は cron(8) デーモンによって自動的に設定される。 SHELL は /bin/sh に設定され、 LOGNAME とHOME は /etc/passwd の crontab の所有者の行から設定される。 PATH は "/usr/bin:/bin" に設定される。 HOME と SHELL、PATH は crontab 内部の記述で変更できる。 LOGNAME はジョブを実行しているユーザなので変更できない。 (さらに注意:LOGNAME 変数は、 BSD システムではまれに USER と称される... これらのシステム上では USER も設定される。) LOGNAME, HOME, SHELL の他に、 cron(8) は「この」crontab を実行した結果メールを送る必要が生じた場合、 MAILTO も参照する。 もしMAILTOが定義されていたら (およびそれが空でなかったら) その名前のユーザーにメールを送る。 MAILTO が定義されていても値が設定されていなければ (MAILTO="")、 メールは送信されない。 MAILTO が定義もされていなければ、メールは crontab の所有者に送られる。 Debian GNU/Linux システムでは、cron は pam_env モジュールをサポートしており、 /etc/security/pam_env.conf で指定された環境変数をロードする。 しかし PAM の設定は、前述の設定や crontab ファイル自体に書かれた設定を上書きでき ない 。特に、"/usr/bin:/bin" 以外の値を PATH に設定したい場合は、 その設定を crontab ファイル内で行う必要があることに注意せよ。 デフォルトでは、cron が送るメールの "Content-Type:" ヘッダの値には "text/plain" が使用され、その "charset=" パラメータには crond(8) を起動したロケールの文字マップやコードセットが設定される。 つまり、使用されるロケールは、 LC_* 環境変数が設定されていない場合はシステムのデフォルトのロケール、 そうでなければ LC_* 環境変数で指定されたロケールとなる ( locale(7) を参照)。 crontab ファイル内で、 変数 CONTENT_TYPE または CONTENT_TRANSFER_ENCODING の値に、 それらの名前をもつメールヘッダの値として適切な値を設定すれば、 メールされる cron ジョブの出力に異なる文字エンコーディングを使用できる。 cron コマンドの形式は V7 標準そのものであるが、 多くの上位互換な拡張がある。 各行には 5 つの時刻・日付フィールドがあり、 さらにコマンドと改行文字 ('\n') が続く。 システムの crontab ファイル (/etc/crontab) は同様のフォーマットを使用するが、 時刻・日付フィールドとコマンドの間で、 コマンドを実行するユーザ名を指定する。 フィールドはスペース区切りでもタブ区切りでもかまわない。 分・時・月が現在時刻と一致し、 かつ、 2 つの日フィールド (月内日または曜日) のいずれかが現在時刻と一致すれば (以下の「注意」を参照)、 コマンドが cron(8) によって実行される。 cron(8) は毎分に一度 cron エントリを調べる。 時間と日付フィールドは以下の通り:
- フィールド
指定可能な値
- 文字列 意味
CRON ファイルの例
# コマンドの実行に、デフォルトの /bin/sh ではなく /bin/bash を使用する。 SHELL=/bin/bash # (この crontab の所有者に関らず) あらゆる出力を `paul' にメールする。 MAILTO=paul # # 毎日、日付変更の 5 分後に実行する 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # 毎月初日の 2:15pm に実行する -- 出力は paul にメールされる 15 14 1 * * $HOME/bin/monthly # 平日の午後 10 時に実行してジョーを心配させる 0 22 * * 1-5 mail -s "午後10時だ" joe%ジョー、%%お前の子どもはどこだい?% 23 0-23/2 * * * echo "毎日 0,2,4..時 23 分に実行する" 5 4 * * sun echo "日曜 4 時 5 分に実行する"
システム CRON ファイルの例
システム CRON ファイルはユーザ名のフィールドを含み、 /etc/crontab によって使用される。# /etc/crontab: システム規模の crontab # 他の crontab ファイルとは異なり、このファイルを編集する際には、新し # いバージョンをインストールするための `crontab' コマンドを実行する必 # 要はない。またこのファイルには、他の crontab ファイルのいずれにも含 # まれないユーザ名のフィールドが含まれる。 SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 42 6 * * * root run-parts --report /etc/cron.daily 47 6 * * 7 root run-parts --report /etc/cron.weekly 52 6 1 * * root run-parts --report /etc/cron.monthly # # anacron の呼び出しは /etc/cron.d ファイルによって行われるようになっ # たので、削除された。
関連項目
cron(8), crontab(1)拡張
曜日指定において、 0 も 7 も日曜日とみなされる。 BSD と ATT ではこのようにはなっていないようだ。 リストと範囲は同じフィールドに共存できる。 ATT や BSD の cron では "1-3,7-9" は拒否されるだろう -- "1-3" または "7,8,9" のいずれかだけしか指定できない。 範囲に「間隔値」を指定できる。すなわち "1-9/2" が "1,3,5,7,9" と同じ。 月または曜日を名前で指定できる。 環境変数を crontab の内部で設定できる。 BSD や ATT では、子プロセスに渡される環境は基本的に /etc/rc のものである。 コマンドの出力は crontab の所有者にメールされる (BSD ではこれを行わない)。 また crontab の所有者以外の人にもメールできる (SysV ではこれができない)。 さらにこの機能を無効にし、 誰にもメールを送らないようにもできる (SysV ではこれもできない)。 最初の 5 つのフィールドの代わりに指定できる `@' コマンドは全て拡張である。著者
Paul Vixie <[email protected]>
24 January 1994 | 4th Berkeley Distribution |