ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 でのシステム情報、プロセス、およびパフォーマンスの管理 Oracle Solaris 11.1 Information Library (日本語) |
このセクションでは、crontab ファイルを使用してシステムタスクをスケジュールするタスクについて説明します。
|
以降のセクションで、crontab ファイルをどのように作成、編集、表示、削除するか、さらに、それらのファイルの使用をどのように制御するかを説明します。
cron デーモンは、各 crontab ファイル内にあるコマンドに従ってシステムタスクをスケジュールします。crontab ファイルには、それぞれ一定間隔で実行されるコマンドが 1 行に 1 つずつ入っています。各行の先頭は cron デーモンが各コマンドを実行する日時情報です。
たとえば、SunOS ソフトウェアのインストール時に root という名前の crontab ファイルが提供されます。このファイルの内容には、次のコマンド行が含まれています。
10 3 * * * /usr/sbin/logadm (1) 15 3 * * 0 /usr/lib/fs/nfs/nfsfind (2) 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 (3) 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean (4)
これらのコマンド行の出力について次に説明します。
最初の行は、毎日午前 3 時 10 分に logadm コマンドを実行します。
2 行目は、毎週日曜日の午前 3 時 15 分に nfsfind スクリプトを実行します。
3 行目は、毎日午前 2 時 10 分に、夏時間をチェック (して必要に応じて修正) するスクリプトを実行します。
RTC タイムゾーンも /etc/rtc_config ファイルもない場合、このエントリは何もしません。
x86 のみ - /usr/sbin/rtc スクリプトは、x86 ベースのシステムでのみ実行できます。
4 行目は、毎日午前 3 時 30 分に Generic Security Service テーブル /etc/gss/gsscred_db の重複エントリをチェック (重複エントリがある場合は削除) します。
crontab ファイル内のコマンド行の構文の詳細は、「crontab ファイルエントリの構文」を参照してください。
crontab ファイルは /var/spool/cron/crontabs ディレクトリに保存されます。SunOS ソフトウェアのインストール時には、root 以外にもいくつかの crontab ファイルが提供されます。次の表を参照してください。
表 4-2 デフォルトの crontab ファイル
|
デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してユーザー自身のシステムタスクをスケジュールできます。その他の crontab ファイルは、作成したユーザーのアカウントに基づいて、bob、mary、smith、jones などのように命名されます。
root またはほかのユーザーの crontab ファイルを使用するには、スーパーユーザーの特権が必要です。
crontab ファイルの作成、編集、表示、削除の手順については、以降のセクションで説明します。
cron デーモンは、crontab コマンドの自動スケジューリングを管理します。cron デーモンは、/var/spool/cron/crontab ディレクトリに crontab ファイルがあるかどうかをチェックします。
cron デーモンは、起動時に次のタスクを実行します。
新しい crontab ファイルがないかを確認する
ファイル内のリストから実行時間を読み取る
正しい時間にコマンドを実行する
更新された crontab ファイルに関する crontab コマンドからの通知を待機する
ほとんど同様に、cron デーモンは at ファイルのスケジューリングを制御します。これらのファイルは /var/spool/cron/atjobs ディレクトリに格納されています。 cron デーモンは、実行された at ジョブに関する crontab コマンドからの通知も待機します。
crontab ファイルは、1 行に 1 つのコマンドが入っており、各コマンド行の最初の 5 つのフィールドでは、コマンドが実行される時間を指定します。これら 5 つのフィールドを、次の表で説明します。これらのフィールドはスペース (空白) で区切られます。
表 4-3 crontab 時間フィールドの値
|
次に、crontab 時間フィールドで特殊文字を使用する際のガイドラインを示します。
各フィールドはスペースで区切る
複数の値の間はコンマで区切る
値の範囲はハイフンを使用して指定する
取り得るすべての値を含むには、ワイルドカードとしてアスタリスクを使用する
コメントまたは空白行を示すには、行の先頭にコメント記号 (#) を使用する
たとえば、次の crontab コマンドエントリは、毎月 1 日と 15 日の午後 4 時に、ユーザーのコンソールウィンドウに注意を促すメッセージを表示します。
0 16 1,15 * * echo Timesheets Due > /dev/console
crontab ファイル内の各コマンドは、長くても 1 行内に入れる必要があります。crontab ファイルは余分なキャリッジリターンを認識しません。crontab のエントリとコマンドオプションの詳細は、crontab(1) のマニュアルページを参照してください。
crontab ファイルを作成するもっとも簡単な方法は、crontab -e コマンドを使用することです。このコマンドは、システム環境で指定されたテキストエディタを起動します。システム環境のデフォルトのエディタは、EDITOR 環境変数で定義されます。この環境変数が設定されていない場合は、crontab コマンドはデフォルトのエディタ ed を使用します。あらかじめ、使い慣れたエディタを選択しておく必要があります。
次の例は、エディタが定義されているかどうかを確認する方法と、viをデフォルトのエディタとして設定する方法を示しています。
$ which $EDITOR $ $ EDITOR=vi $ export EDITOR
crontab ファイルを作成すると、自動的に /var/spool/cron/crontabs ディレクトリ内に格納され、作成者のユーザー名で命名されます。root 特権があれば、ほかのユーザーや root の crontab ファイルを作成または編集できます。
始める前に
root またはほかのユーザーに属する crontab ファイルを作成または編集する場合は、root 役割になる必要があります。『Oracle Solaris 11.1 の管理: セキュリティーサービス』の「割り当てられている管理権限を使用する方法」を参照してください。
自分の crontab ファイルを編集する場合は、root 役割になる必要はありません。
# crontab -e [username]
username は、crontab ファイルを作成または編集するユーザーのアカウント名を指定します。自分の crontab ファイルを作成するにはスーパーユーザー特権は必要ありませんが、root または別のユーザーの crontab ファイルを作成したり編集したりするには、スーパーユーザー特権が必要です。
「crontab ファイルエントリの構文」 に記載されている構文に従ってください。crontab ファイルは、 /var/spool/cron/crontabs ディレクトリに保存されます。
# crontab -l [username]
例 4-1 crontab ファイルを作成する
次の例は、他のユーザーのための crontab ファイルをどのように作成するかを示します。
# crontab -e jones
次のコマンドエントリを新しい crontab ファイルに追加すると、毎週日曜日の午前 1 時にユーザーのホームディレクトリからすべてのログファイルが自動的に削除されます。このコマンドエントリは出力先を変更しないので、出力先変更文字がコマンド行の *.log のあとに追加されます。このためコマンドが正しく実行されます。
# This command helps clean up user accounts. 1 0 * * 0 rm /home/jones/*.log > /dev/null 2>&1
$ ls -l /var/spool/cron/crontabs
ユーザーの crontab ファイルの内容を確認するには、 crontab -l コマンドを使用します。「crontab ファイルを表示する方法」を参照してください。
crontab -l コマンドは、cat コマンドが他のファイルタイプの内容を表示するのとほぼ同様に、crontab ファイルの内容を表示します。このコマンドを使用するために、(crontab ファイルが入っている) /var/spool/cron/crontabs ディレクトリに移動する必要はありません。
デフォルトでは、crontab -l コマンドは自分自身の crontab ファイルを表示します。他のユーザーの crontab ファイルは、スーパーユーザーでなければ表示できません。
始める前に
root またはほかのユーザーに属する crontab ファイルを表示するには、root 役割になります。『Oracle Solaris 11.1 の管理: セキュリティーサービス』の「割り当てられている管理権限を使用する方法」を参照してください。
自分の crontab ファイルを表示する場合は、root 役割になる必要はありません。
# crontab -l [username]
username は、crontab ファイルを表示するユーザーのアカウント名を指定します。他のユーザーの crontab ファイルを表示するには、スーパーユーザー特権が必要です。
注意 - 誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの中断文字を入力してください。この文字を入力すると、変更結果を保存せずに crontab コマンドを終了できます。この場合に変更結果を保存してファイルを終了すると、既存の crontab ファイルが空のファイルで上書きされます。 |
例 4-2 crontab ファイルを表示する
次の例は、crontab -l コマンドを使用してユーザーのデフォルトの crontab ファイルを表示する方法を示します。
$ crontab -l 13 13 * * * chmod g+w /home1/documents/*.book > /dev/null 2>&1
例 4-3 デフォルトの root の crontab ファイルを表示する
次の例は、デフォルトの root の crontab ファイルを表示する方法を示します。
$ suPassword: # crontab -l #ident "@(#)root 1.19 98/07/06 SMI" /* SVr4.0 1.1.3.1 */ # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean #10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___
例 4-4 他のユーザーの crontab ファイルを表示する
次の例は、他のユーザーの crontab ファイルを表示する方法を示します。
$ su Password: # crontab -l jones 13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1
デフォルトでは、rm コマンドを使用して誤って crontab ファイルを削除してしまうことがないように、crontab ファイルは保護されています。crontab ファイルを削除する場合は、rm コマンドではなく crontab -r コマンドを使用してください。
デフォルトでは、crontab -r コマンドは自分自身の crontab ファイルを削除します。
このコマンドを使用するために、/var/spool/cron/crontabs ディレクトリ (crontab ファイルが入っている) に移動する必要はありません。
始める前に
root またはほかのユーザーに属する crontab ファイルを削除するには、root 役割になります。役割には、認証と特権コマンドが含まれます。『Oracle Solaris 11.1 の管理: セキュリティーサービス』の「割り当てられている管理権限を使用する方法」を参照してください。
自分の crontab ファイルを削除する場合は、root 役割になる必要はありません。
# crontab -r [username]
username は、crontab ファイルを削除するユーザーのアカウント名を指定します。他のユーザーの crontab ファイルを削除するには、スーパーユーザーの権限が必要です。
注意 - 誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの中断文字を入力してください。この文字を入力すると、変更結果を保存せずに crontab コマンドを終了できます。この場合に変更結果を保存してファイルを終了すると、既存の crontab ファイルが空のファイルで上書きされます。 |
# ls /var/spool/cron/crontabs
例 4-5 crontab ファイルを削除する
次の例では、ユーザー smith が crontab -r コマンドを使用して自分の crontab ファイルを削除します。
$ ls /var/spool/cron/crontabs adm jones root smith sys uucp $ crontab -r $ ls /var/spool/cron/crontabs adm jones root sys uucp
/etc/cron.d ディレクトリ内の 2 つのファイルを使用して、crontab コマンドの使用を制御できます。 これらのファイルは cron.deny および cron.allow です。これらのファイルによって、指定したユーザーだけが、それぞれ自分の crontab ファイルの作成、編集、表示、または削除などの crontab コマンドのタスクを実行できるようにします。
cron.deny ファイルおよび cron.allow ファイルは、それぞれ 1 行に 1 ユーザー名が入ったリストからなります。
これらの使用制御用ファイルは、次のように連携して機能を果たします。
cron.allow が存在する場合は、このファイルにリストされているユーザーだけが crontab ファイルを作成、編集、表示、または削除できます。
cron.allow が存在しない場合は、cron.deny にリストされているユーザーを除くすべてのユーザーが crontab ファイルを使用できます。
cron.allow も cron.deny も存在しない場合は、crontab コマンドの実行にスーパーユーザーの権限が必要です。
cron.deny と cron.allow ファイルを編集または作成するには、スーパーユーザーの権限が必要です。
SunOS ソフトウェアのインストール時に作成される cron.deny ファイルには、次のユーザー名が含まれます。
$ cat /etc/cron.d/cron.deny daemon bin smtp nuucp listen nobody noaccess
デフォルトの cron.deny ファイル内のユーザー名は、いずれも crontab コマンドを使用できません。このファイルを編集して、crontab コマンドの使用を拒否したいユーザー名を追加できます。
cron.allow のデフォルトファイルは提供されません。つまり、Oracle Solaris ソフトウェアをインストールした直後は、すべてのユーザー (デフォルトの cron.deny ファイルにリストされているユーザーを除く) が crontab コマンドを使用できます。cron.allow ファイルを作成した場合、そのユーザーだけが crontab コマンドを使用できます。
『Oracle Solaris 11.1 の管理: セキュリティーサービス』の「割り当てられている管理権限を使用する方法」を参照してください。
$ su - Password: #
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . .
# cat /etc/cron.d/cron.deny daemon bin nuucp listen nobody noaccess
『Oracle Solaris 11.1 の管理: セキュリティーサービス』の「割り当てられている管理権限を使用する方法」を参照してください。
このファイルに root を追加しないと、スーパーユーザーの crontab コマンドの使用が拒否されます。
crontab コマンドの使用を許可するユーザーを入れます。
root username1 username2 username3 . . .
例 4-6 crontab コマンドの使用を特定のユーザーに限定する
次は、ユーザー jones、temp、および visitor に crontab コマンドを使用させない cron.deny ファイルの例です。
$ cat /etc/cron.d/cron.deny daemon bin smtp nuucp listen nobody noaccess jones temp visitor
次は、cron.allow ファイルの例です。ユーザー root、jones、および smith だけが、crontab コマンドを使用できます。
$ cat /etc/cron.d/cron.allow root jones smith
特定のユーザーが crontab コマンドを使用できるかどうかを確認するには、そのユーザーのアカウントでログインして crontab -l コマンドを使用します。
$ crontab -l
そのユーザーが crontab を使用できて、すでに crontab ファイルを作成している場合は、そのファイルが表示されます。そのユーザーが crontab コマンドを使用できるが、crontab ファイルがない場合は、次のようなメッセージが表示されます。
crontab: can't open your crontab file
このユーザーは、cron.allow ファイル (が存在する場合) に含まれているか、cron.deny ファイルに含まれていません。
ユーザーが crontab コマンドを使用できない場合は、上記の crontab ファイルの有無にかかわらず、次のメッセージが表示されます。
crontab: you are not authorized to use cron. Sorry.
このメッセージは、ユーザーが cron.allow ファイル (が存在する場合) に含まれていないか、cron.deny ファイルに含まれていることを意味します。