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 デーモンは、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

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

項目 説明
0 から 59 まで
hour 0 から 23 まで
日-月 (day_of_month) 1 から 31 まで
1 から 12 まで
平日 日曜日から土曜日までを表す 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 a.mに実行します。 毎週月曜日、水曜日、および金曜日に、次のように入力します。
    30 6 * * 1,3,5 /usr/bin/calendar
  4. 当該年を通して毎日 6:30 に calendar コマンドを実行する場合は、次のように 入力します。
    30 6 * * * /usr/bin/calendar
  5. 以下のスクリプトを実行します。maintenance毎年 8 月の真夜中に、次のように入力します。
    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 コマンドへのアクセスが禁止されている一連のユーザーを指定します。