EN JA
CRONTAB(5)
CRONTAB(5) FreeBSD File Formats Manual CRONTAB(5)

名称

crontabcron を駆動するためのテーブル

解説

crontab ファイルは、次の一般的な形式の cron(8) デーモンへの指示を含んでいます: ``この日のこの時間に、このコマンドをこの時期に実行する''。各ユーザは、彼ら自身の crontab があり、あらゆる与えられた crontab のコマンドは、crontab を所有するユーザとして実行されます。 uucp と News は、通常、cron コマンドの一部分として明示的に su(1) を実行するための必要を排除して、それら自体の (複数の) crontab があります。

空行と、先頭の空白およびタブは、無視されます。最初の非空白文字がシャープ記号 (#) である行は、注釈行であり、無視されます。注釈は、cron コマンドと同じ行にあってはいけません。なぜなら、注釈自身がコマンドの一部とみなされるからです。同様に、注釈は、環境変数を設定する行と同じ行にあってはいけません。

crontab の中で有効なのは環境変数の設定かまたは cron コマンドのどちらかです。環境変数の設定は、次のような形で行います。

    name = value

ここで等号 (=) の周囲の空白は、有っても良いですが、 value の中で = に引き続くスペースでない部分だけが name に割当てられる値となります。 value 文字列は、クォート (シングルクォートまたはダブルクォートですがどちらかに統一します) で囲うこともでき、そのときには、= に続くブランクや末尾のブランクを含むことができます。 name 文字列もクォート (シングルクォートまたはダブルクォートですがどちらかに統一します) で囲うこともでき、前置、後置および内部の空白を保ちます。

いくつかの環境変数は、自動的に cron(8) デーモンによって設定されます。 SHELL は、 /bin/sh に設定され、 PATH は、 /usr/bin:/bin に設定され、 LOGNAMEHOME は、その crontab の所有者の /etc/passwd 行を元に設定されます。 HOME, PATHSHELL は、crontab ファイル中で設定することで上書きできますが、 LOGNAME はできません。

(別注: LOGNAME 変数は、 BSD システム上では、 USER と呼ばれることがあります。このようなシステム上では、 USER も設定されます。)

LOGNAME, HOME, PATH, SHELL に加え、 ``この'' crontab で実行したコマンドの実行結果をメールで送る理由がある場合、 cron(8) は、 MAILTO を見ます。 MAILTO が定義されていて (かつ空でない) とき、そこで指定された名前のユーザへメールが送られます。なお MAILTO に複数の受信者をコンマで区切って指定すると、複数の受信者へメールを送れます。 MAILTO が定義されているが空のとき (MAILTO="")、メールは、送られません。その他の場合にはメールは、crontab の所有者に送られます。このオプションは、cron をインストールするとき、メーラ (mailer) として /usr/lib/sendmail の代わりに /bin/mail に決めるなら、有用です -- /bin/mail は、エイリアスを行わず、UUCP は、通常そのメールを読み込みません。

cron コマンドのフォーマットは、ほとんど V7 標準であり、多くの上位互換拡張を持っています。各行は、5 つの時間と日付の欄、システム crontab ファイルの場合は、続いてユーザ名 (``:<グループ>'' および ``/<ログインクラス>'' の添字が付くこともあります)、その後にコマンドが続きます。分、時間、月の欄と現在の時刻が一致し、 かつ 2 つの日付欄 (月における日または曜日) のうちの少なくとも 1 つと現在の時刻が一致したとき (下記の ``注'' 参照) に、コマンドは、 cron(8) により実行されます。 cron(8) は、1 分ごとに cron エントリを調べます。時間と日付の欄は、次のとおりです。

     欄           許される値 
------------   ------------------------------------------------ 
     分       0-59 
    時間      0-23 
月における日  1-31 
     月       1-12 (または名前、下記参照) 
    曜日      0-7 (0 および 7 は、日曜のこと。名前を用いてもよい)

欄は、アスタリスク (*) でも良いですが、このときには、常に "最初-最後"を表すことになります。

数値領域を指定できます。領域指定は、2 つの数をハイフンでつなげたものです。指定された領域は、両端を含みます。たとえば ``時間'' エントリの 8-11 は、 8, 9, 10, 11 時の実行を指定することになります。

リスト指定もできます。リスト指定は、コンマによって数 (または領域指定) をつなげた 1 組のことです。例: ``1,2,5,9'', ``0-4,8-12''。

間隔値は、領域指定と共に用いることができます。領域指定に続けて ``/<数>'' を指定すると、その領域を通じてその数の値だけ飛ばす値になります。たとえば ``0-23/2'' は、時間の欄で用いられると、2 時間おきにコマンドを実行することになります (別の方法で V7 標準で表せば ``0,2,4,6,8,10,12,14,16,18,20,22'' となります)。間隔指定は、アスタリスクの後で付けても構いません。たとえば ``2 時間おきに全て'' ということをしたいなら ``*/2'' とするだけです。

``月'' および ``曜日'' の指定には、名前を使用することができます。曜日と月の指定には、最初の 3 文字を使ってください (この場合、大文字・小文字の区別はありません)。名前による領域指定やリスト指定はできません。

``6 番目'' の欄 (行の残りの部分) には、実行したいコマンドを指定します。行の中のコマンド部全体、これは、改行または % 文字までですが、 /bin/sh か、またはその cron ファイルの SHELL 変数で指定されたシェルによって実行されます。コマンド内のパーセント記号 (%) は、バックスラッシュ (\) でエスケープされない限り改行文字に変換され、その最初の % 以降の全てのデータは、そのコマンドの標準入力となります。

注: コマンド実行の日付は、2 つの欄— 1 ヶ月中の日および曜日—で指定できます。両方の欄が領域限定されている (すなわち * でない) 場合、コマンドは、 どちらかの 欄が現在の時刻と一致するときに実行されます。たとえば ``30 4 1,15 * 5'' は、各月の 1 日および 15 日に加えて全ての金曜日において、午前 4:30 にコマンドを実行させます。

最初の 5 個の欄の代りに、 8 種類の特殊文字列のうちのいずれかが登場しても良いです:

文字列  意味 
------  ------- 
@reboot  クーロンの起動時に 1 回実行. 
@yearly  1 年に 1 回実行, "0 0 1 1 *". 
@annually (@yearly と同じ) 
@monthly 1 月に 1 回実行, "0 0 1 * *". 
@weekly  1 週に 1 回実行, "0 0 * * 0". 
@daily  1 日に 1 回実行, "0 0 * * *". 
@midnight (@daily と同じ) 
@hourly  1 時間に 1 回実行, "0 * * * *". 
@every_minute 1 分に 1 度実行, "*/1 * * * *". 
@every_second 1 秒に 1 度実行.

cron ファイルの例

 
# 既定設定を cron でオーバライドし、コマンドの実行に /bin/sh を使用 
SHELL=/bin/sh 
# これが誰の crontab であっても、全ての出力は、`paul' にメールする 
MAILTO=paul 
# 
# 毎日深夜 0 時 5 分に実行する 
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 
# 毎月の最初の日の PM 2:15 に実行する -- 出力結果は、paul にメールされる 
15 14 1 * *     $HOME/bin/monthly 
# ウィークディの PM 10 時に実行して Joe をうるさがらせる 
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?% 
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday" 
5 4 * * sun     echo "run at 5 after 4 every sunday"

関連項目

crontab(1), cron(8)

機能拡張項目

曜日を指定するとき、日 0 と日 7 は、日曜日とみなされます。 BSD と ATT は、この件については、一致していないようです。

リスト指定および領域指定は、同じ欄内で指定できます。 "1-3,7-9"は、 ATT または BSD cron では、受け付けません -- "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 <paul@vix.com>

バグ

利用者が夏時間を順守する 70 余りの国々のうちの 1 つにいるなら、 cron(8)-s フラグをつけて開始されていないなら、ロールバック (rollback) または移行 (advance) 中にスケジュールされたジョブは、影響されるかもしれません。一般的に、 cron(8) が (デフォルトで有効である) -s フラグを付けて開始されていないなら、この期間の間にジョブをスケジュールすることは、よい考えではありません。より詳しい情報については、 cron(8) を参照してください。

US タイムゾーンでは、(AZ と HI を除き)、時刻シフトは、午前 2 時に起ります。他の国では、 zdump(8) プログラムの冗長 ( -v) オプションを使用して、時刻シフトがいつ起るのかを判定してください。

April 28, 2012 FreeBSD