cron -
予定されたコマンドを実行するデーモン(Vixie
Cron)
cron [
-f]
cron
は、マルチユーザのランレベルで入ると
/etc/init.d
から自動的に起動する。
- -f
- フォアグラウンドモードに留まり続け、デーモンにならない。
- -l
- /etc/cron.d
のファイルについて
LSB
準拠の名前を有効にする。
cron は、スプール領域
(/var/spool/cron/crontabs) に置かれた crontab
ファイルを探す
(これらのファイルには
/etc/passwd
内のアカウントを元にした名前がつけられている)。
見つかった crontab
ファイルはメモリにロードされる。
このディレクトリの
crontab
ファイルは直接アクセスすべきではないことに注意せよ。
ファイルのアクセスや更新には
crontab
を使用すべきである。
cron は /etc/crontab
も読み込む。このファイルのフォーマットは少々異なっている
(
crontab(5) を参照)。 さらに
cron は /etc/cron.d
内のファイルも読み込み、それらのファイルを
/etc/crontab
ファイルと同様に処理する
(/etc/cron.d 内のファイルは
/etc/crontab
の特別なフォーマットに従う。つまりユーザ名のフィールドを含む)。
しかし、/etc/cron.d
内のファイルは /etc/crontab
とは独立している。
つまり、例えば環境変数の設定を
/etc/crontab
から継承したりはしない。
この機能の用途は、/etc/cron.{daily,weekly,monthly}
ディレクトリよりも細かな予定の調節を必要とするパッケージが、
/etc/cron.d に crontab
ファイルを追加できるようにすることである。
これらのファイルには、
そのファイルを提供するパッケージを元にした名前をつけるべきである。
また、ファイルの名前は、
run-parts(8)
で使用される命名規則に準拠していなければならない。
つまり、大文字・小文字・数字・アンダースコア・ハイフンのみから
成っていなければならない。
-l
オプションが指定されている場合、ファイル名は、
run-parts の
--lsbsysinit
オプションの対象となる
LSB
の名前空間の仕様に準拠していなければならない。
/etc/crontab と同様、 /etc/cron.d
ディレクトリ内のファイルも変更が監視される対象となる。
管理者は一般に、/etc/cron.d/
ではなく、
標準のシステムの crontab
ファイル /etc/crontab
を使用すべきである。
その上で
cron は 1
分ごとに起動し、
保存された crontab
ファイルをすべて調べ、
各コマンドについて、その時刻に実行すべきかを調べて確認する。
コマンド実行時に、出力はすべて
crontab の所持者に
(または、crontab
ファイル内で MAILTO
環境変数に名前を書かれたユーザがあればそのユーザに)
メールで送信される。
これらのプロセスを実行する
cron
の子コピーの名前には、
syslog や ps
の出力に見られるように、
親の名前を強制的に大文字にしたものが使われる。
さらに
cron は 1
分ごとにスプールディレクトリ(または
/etc/crontab
ファイル)の最終修正時刻(modtime)をチェックし、もし変更されていれば、
すべての crontab
ファイルの最終修正時刻をチェックし、
変更された crontab
ファイルを読み直す。
よって crontab
ファイルを修正するたびに
cron
を再起動する必要はない。
crontab(1) コマンドは、crontab
ファイルが変更されたかどうかにかかわらず、
スプールディレクトリの最終修正時刻を更新することに注意せよ。
時計に対して 3
時間未満の変更が与えられたとき、
例えばサマータイムが始まるときや終わるときについては、
特別の配慮がなされる。
時間が進められた場合、
飛ばされた時間に実行されるはずだったジョブは変更後すぐに実行される。
逆に、3
時間未満の時間が戻された場合、
繰り返される時間に入ったジョブが再び実行されることはない。
この配慮の影響は、
特定の時刻に実行されるジョブ
(@hourly
を用いて指定されていなく、
「時」や「分」のフィールドに
'*' がないジョブ)
のみが受ける。
ワイルドカードで指定されたジョブは、
直ちに新しい時刻に基づいて実行される。
3
時間を超える時計の変更は時刻の修正と見なされ、
直ちに新しい時刻が使用される。
cron は、syslog の 'cron'
機能にアクションの記録
(ログ) をとる。
ロギングは、標準の
syslogd(8)
の機能を用いて調節してもかまわない。
crontab(1),
crontab(5)
Paul Vixie <[email protected]>