crontab コマンド

目的

クーロン・ジョブの実行依頼、編集、リスト、除去を実行します。

構文

crontab [ -e [UserName ] | -l [UserName ] | -r [UserName ] | -v [UserName ] | File ]

説明

crontab コマンドは、cron ジョブの実行のほか、編集、リスト、除去を行います。cron ジョブとは、cron デーモンによりスケジュールされ、一定の周期で実行されるジョブです。cron ジョブの実行を要求するには、crontab コマンドに -e フラグを指定します。 crontab コマンドは、編集セッションを起動します。この編集セッションで、crontab ファイルを作成できます。 crontab ファイルに、各 cron ジョブのエントリーを作成します。各エントリーは cron デーモンによって受け入れ可能なフォーマットで作成する必要があります。 エントリーの作成方法の詳細については、crontab ファイルのエントリーのフォーマットを参照してください。

エントリーの作成が完了してファイルを終了すると、crontab コマンドによりこのファイルは /var/spool/cron/crontabs ディレクトリーにコピーされ、現行ユーザー名と同じ名前のファイルに保管されます。crontabs ディレクトリーに現行ユーザー名が付いたファイルが既に存在している場合は、crontab コマンドはこの既存のファイルを上書きします。

また、File パラメーターを指定して crontab ファイルを作成する方法もあります。 既に crontab ファイルが存在している場合、このファイルは cron デーモンによって受け入れ可能なフォーマットでなければなりません。 crontab ファイルが存在していない場合は、crontab コマンドによりエディターが起動されます。 この時 EDITOR 環境変数が指定されていると、この変数に指定されているエディターが起動されます。指定されていない場合は、crontab コマンドは vi エディターを起動します。

crontab ファイルの内容を表示するには、crontab コマンドに -l フラグを指定します。 既存のファイルを除去するには、-r フラグを指定します。

オプションの UserName パラメーターは、 crontab ファイルのオーナーまたは root ユーザーが、 編集、出力、除去、または特定ユーザーの cron ジョブの状況を確認するために使用できます。 UserName が無効である場合は、エラー・メッセージが生成されてプログラムが終了します。

オプションの UserName パラメーターが指定されていない場合は、 crontab フラグは root ユーザーと現行ユーザーに使用可能です。

セキュリティー

root ユーザーまたは crontab ファイルのオーナーだけが、-e-l-r、および -v フラグを指定したあと、 UserName を使用して、特定ユーザーの crontab ファイルを編集、 出力、除去、または確認することができます。

cron デーモン

cron デーモンは、crontab ファイルのエントリーに基づいてコマンドを実行します。 cron ジョブの出力を標準出力または標準エラーにリダイレクトしていない限り、cron デーモンはコマンド出力またはエラーをユーザーに送ります。 crontab ファイルでの cron ジョブの指定が誤っていると、 cron デーモンはジョブを実行しません。

cron デーモンは、cron デーモンの初期化時にのみ crontab ファイルを調べます。 crontab コマンドを使用して crontab ファイルを変更すると、 ファイルの変更を示すメッセージが cron デーモンへ送られます。 これにより、新しいファイルや変更されたファイルがあるかどうかを定期的に調べるオーバーヘッドがなくなります。

crontab コマンドの使用制御

/var/adm/cron/cron.allow ファイルと /var/adm/cron/cron.deny ファイルにより、crontab コマンドを実行できるユーザーが制御されます。root ユーザーは、この 2 つのファイルを作成、編集、または削除することができます。この 2 つのファイル内のエントリーには、1 行に 1 つずつユーザー・ログイン名が登録されています。複数のログイン名に関連付けられているログイン ID の場合、実際に使用されているログイン名に関係なく、crontab コマンドは /etc/passwd ファイル内の最初のログイン名を使用します。 さらに、ユーザーが cron ジョブを開始できるようにするには、/etc/security/user ファイルのデーモン属性を、chuser コマンドを使用して TRUE に設定する必要があります。

cron.allow ファイルの例を以下に示します。

root
nick
dee
sarah

cron.allow ファイルが存在する場合は、このファイル内にログイン名が登録されているユーザーだけが crontab コマンドを実行できます。cron.allow ファイルが存在する場合、root ユーザーのログイン名は必ずこのファイルに登録されていなければなりません。システム管理者は、ユーザーのログイン名を cron.deny ファイルに登録することで、そのユーザーによる crontab コマンドの使用を明示的に禁止できます。cron.deny ファイルだけが存在する場合、このファイルに名前が登録されていないユーザーなら誰でも、crontab コマンドを実行できます。

以下のいずれかの条件に該当する場合、ユーザーは crontab コマンドを使用できません。

  • cron.allow ファイルと cron.deny ファイルが存在しない場合 (root ユーザーのみが使用可能)。
  • cron.allow ファイルが存在するが、ユーザーのログイン名がこのファイルに登録されていない場合。
  • cron.deny ファイルが存在し、ユーザーのログイン名がこのファイルに登録されている場合。

cron.allow ファイルと cron.deny ファイルの両方が存在しない場合は、crontab コマンドを使用してジョブの実行を要求できるのは root ユーザー権限を持つユーザーだけです。

crontab ファイルのエントリーのフォーマット

crontab ファイルには、各 cron ジョブに対応するエントリーが登録されています。 各エントリーは改行文字で区切られています。crontab ファイルの各エントリーは、スペースまたはタブで区切られた以下のフォーマットの 6 つのフィールドから構成されます。

 
minute  hour  day_of_month  month  weekday  command

このフィールドに指定できる値は以下のとおりです。

項目 説明
minute 0 から 59 まで
hour 0 から 23 まで
day_of_month 1 から 31 まで
month 1 から 12 まで
weekday 日曜日から土曜日までを表す 0 から 6 まで
command シェル・コマンド

各フィールドには必ず値を指定しなければなりません。command フィールド以外のフィールドには、以下の情報を指定できます。

  • 指定されている範囲内の数値。例えば、5 月にコマンドを実行するには、month フィールドに 5 を指定します。
  • 値の範囲を示す、ハイフンで区切られた 2 つの数値。例えば、cron ジョブを火曜日から金曜日まで実行するには、weekday フィールドに 2-5 と入力します。
  • コンマで区切られた数値のリスト。例えば、コマンドを 1 月 1 日と 1 月 31 日に実行するには、day_of_month フィールドに 1, 31 と指定します。
  • ダッシュで区切った 2 つの数値の組み合わせ (その間のすべての数値を含んだ範囲を示すもの) と、 コンマで区切った数値のリストを同時に使用することができます。 例えば、コマンドを 1 月 1 日、10 日から 16 日、および 31 日に実行するには、 day_of_month フィールドに 1,10-16,31 と指定します。 上記 2 つの指定方法を組み合わせて使用することもできます。
  • 許可されているすべての値を表す * (アスタリスク)。 ジョブを毎時間実行するには、hour フィールドにアスタリスクを指定します。
注: 円記号の後にくる文字 (% を含む) は、すべて文字どおりに扱われます。 日付の指定方法として、日付 (day of month) と曜日の 2 つのフィールドを使用する方法があります。 両方のフィールドをエレメント・リストとして指定すると、両方の指定が有効となります。以下のエントリーを例に説明します。
0 0 1,15 * 1 command

このエントリーにより、コマンドは毎月 1 日および 15 日と毎週月曜日に実行されます。1 つのフィールドだけを使用して日付を指定している場合、もう 1 つのフィールドには * を指定してください。

コマンドの指定

cron デーモンは、6 番目のフィールドに指定されたコマンドを、選択された日時に実行します。6 番目のフィールドに % (パーセント記号) を指定した場合、この % 記号をエスケープ (¥%) しない限り、cron デーモンは % 記号の前のすべてのデータをコマンド呼び出しとして処理し、% 記号のあとのすべてのデータを標準入力に使用できるようにします。ブランク行、および行の最初のブランク以外の文字が番号記号 (#) である行は、無視さ れます。 コマンドに与えられる引数に円記号 (¥) がある場合、その円記号の前にもう 1 つ円記号がなければなりません。

注: シェルは、コマンド・フィールドの最初の行だけを実行します。他のすべての行は標準入力としてコマンドに使えるようになります。

cron デーモンは、HOME ディレクトリーからサブシェルを始動します。ログインしていない時にコマンドを実行するようにスケジュールし、そのコマンドにより各自の .profile ファイル内のコマンドが実行されるようにするには、スケジュールするコマンドによって明示的に .profile ファイルが読み込まれる必要があります。

cron デーモンはシェルごとにデフォルト環境を設定し、HOMELOGNAMESHELL、(=/usr/bin/sh)、PATH (=/usr/bin) を定義します。

監査イベント

監査サブシステムが適切に構成されており、かつ使用可能である場合、crontab コマンドを実行するたびに、 次の監査レコード (イベント) が生成されます。

イベント 情報
CRON_JobRemove crontab ファイルを除去したユーザーおよび除去した日時を表示します。
CRON_JobAdd crontab ファイルを編集したユーザーおよび編集した日時を表示します。

RBAC ユーザーと Trusted AIX® ユーザーへの注意: このコマンドは特権命令を実行できます。特権命令を実行できるのは特権ユーザーのみです。 権限および特権の詳細情報については、「セキュリティー」の『特権コマンド・データベース』を参照してください。このコマンドに関連した特権および権限のリストについては、lssecattr コマンドまたは getcmdattr サブコマンドを参照してください。

フラグ

項目 説明
-e UserName 有効な UserName に対する crontab ファイルが存在していない場合に、 ユーザーの crontab ファイルのコピーを編集するか、または編集用に空ファイルを作成します。 編集が完了すると、そのファイルはユーザーの crontab ファイルとして、 crontab ディレクトリーにコピーされます。
-l UserName ユーザーの crontab ファイルを表示します。
-r UserName crontab ディレクトリーからユーザーの crontab ファイルを除去します。
-v UserName ユーザーの cron ジョブの状況を表示します。

終了状況

このコマンドは、以下の終了値を返します。

項目 説明
0 正常終了。
>0 エラーが発生しました。

  1. mycronjobs と呼ばれるファイルを /var/spool/cron/crontabs ディレクトリーにコピーする場合は、次のように入力します。
    crontab mycronjobs
    ファイル は、次のようにコピーされます。
    /var/spool/cron/crontabs/<username>
    ここで、<username > は、ご使用の現行ユーザー名です。
  2. 毎正時に時刻をコンソールに書き込む場合は、次のように入力します。
    0 * * * * echo The hour is `date` . 
    >/dev/console
  3. calendar コマンドを月曜日、水曜日、および金曜日ごとに午前 6:30 に実行する 場合は、次のように入力します。
    30 6 * * 1,3,5 /usr/bin/calendar
  4. 当該年を通して毎日 6:30 に calendar コマンドを実行する場合は、次のように 入力します。
    30 6 * * * /usr/bin/calendar
  5. maintenance と呼ばれるスクリプトを 8 月に、毎日深夜 12 時に実行する 場合は、次のように入力します。
    0 0 * 8 * /u/harry/bin/maintenance
  6. コマンドに対する標準入力のテキストを定義する場合は、次のように入力します。
    0 16 * 12 5 /usr/sbin/wall%HAPPY HOLIDAY!%Remember to 
    turn in your time card.
    % (パーセント記号) の後に続くテキストにより、wall コマンドへの標準入力は以下のように定義されます。
    HAPPY HOLIDAY!
     
    Remember to turn in your time card.

ファイル

項目 説明
/var/adm/cron/FIFO crontab コマンドまたは at コマンドにより新しいジョブの実行が要求されたときに、cron デーモンへメッセージを送信する名前付きパイプです。
/var/spool/cron/crontabs crontab のスプール領域を指定します。
/var/adm/cron/cron.allow crontab コマンドへのアクセスが許可されている一連のユーザーを指定します。
/var/adm/cron/cron.deny crontab コマンドへのアクセスが禁止されている一連のユーザーを指定します。