Last Modiffied: 22 Mar 2004 |
cron の設定ガイド |
1.はじめに |
■はじめに
cron とは、ジョブ(スクリプト)を自動実行するためのデーモンプロセスです。そして、Linux システムの管理を行なう場合、ログのローテートや、バックアップなど、定期的に自動実行したいジョブが数多くあります。特に、バックアップなどは、システムへの負荷が大きいため、通常は、ユーザからのアクセスが少ない、深夜や早朝に行なわれます。 このように、定期的に実行されるジョブは、crond というデーモンによって、自動的に行なうように管理することができます。そこで、今回は、cron の設定を行なうために必要なコマンドや、設定ファイルについて説明していきたいと思います。
|
2.設定手順など |
■設定手順
このページでは、以下の順番で cronの設定について説明します。 まず、Linuxシステム上で、cron を使用するために、サービスの起動で、サービスの状態を確認し、停止している場合には、サービスを起動します。 次に、cronの設定を行なうために必要な、コマンドの使用方法と、設定ファイル(/var/spool/cron/user)について説明します。さらに、「/etc/crontab」ファイルから呼ばれるディレクトリでの設定について説明します。 そして、crontabコマンドの使用を制限する方法をアクセス制限で説明し、最後に、簡単な設定例を紹介してcronの設定方法についての説明を終わります。 ■その他 このページは、crontab の man ページを参考に、cronの基本的な設定方法についてのみ説明を行ないます。このページで説明していない内容については、以下のコマンドを実行して crontab の man ページを参照したり、Internetで検索するなどして使用して下さい。 # man 5 crontab |
3.準備 |
■サービスの起動
cron を使用するためには、crond が起動していなくてはいけません。通常は、インストール時にサービスが自動起動するように設定されていますが、以下のコマンドで、crond の状態を確認します。 # /etc/rc.d/init.d/crond status crond (pid xxx) を実行中... # /etc/rc.d/init.d/crond start crondを起動中: # chkconfig --level 2345 crond on ・・・(注1) # chkconfig --list crond ・・・(注2) crond 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ
■cronの設定ファイル cronの設定ファイルは、以下の表の通りです。crond は、毎分、以下の設定ファイルの内容に変更がないかを確認し、変更があった場合には、それを反映して実行します。
■crontabコマンドの書式 crontabファイルは、cron を操作する際に作成し、プロセスを定期的に実行するためのファイルで、crontabコマンドで作成します。書式は、以下の通りです。 # crontab [- u user] {-l|-r|-e}
■crontabコマンドの使用例 以下に、crontabコマンドの使用例を紹介します。 rootユーザが、testユーザの crontabファイルを表示する場合。 # crontab -l -u test $ crontab -e |
4.設定ファイル(/var/spool/cron/user) |
■「/var/spool/cron/user」 ファイルの書式
crontabファイルでは、crond への命令を、「この日付のこの時刻に、このコマンドを実行して下さい。」といった形式で書き込みます。そして、ユーザは、それぞれのcrontabファイルを「/var/spool/cron」配下にuser という名前で所有しており、使用するコマンドは、そのcrontabファイルを所有しているユーザの権限で実行されるので、コマンド使用の際には注意が必要です。 また、このファイルの中は、おおまかに、コメント行、環境変数の設定、cronコマンドの実行、のいずれかに分けることができ、その内容を記述します。なお、コメント行は、通常のファイルと同様に、先頭に '#' を書きます。 なお、このファイルの作成/編集は、 'crontab -e' とコマンドを実行して行ないます。 ■環境変数の設定 環境変数は、以下の形式で設定を行ないます。 環境変数名 = 値 また、crontabの実行結果をメールで通知するために、MAILTOを指定することもできます。 MAILTO = user user には、crontabの実行結果を送信するユーザを登録します。メールの送信先を複数指定する場合には、 user を ','(カンマ) で区切って指定します。user を登録せず、環境変数、MAILTOのみを指定した場合(MAILTO='' または MAILTO="" と指定)、メールを送信しない設定になります。なお、MAILTOが記述されない場合には、crontabファイルの所有者宛に、crontabの実行結果を通知するメールが送信されます。 ■cron コマンドの設定 crontabファイルで、cron コマンドの実行を記述する行は、6つのフィールドで形成されており(システムの crontabファイル(/etc/crontab)は、7つ(分、時、日、月、曜日、ユーザ名、コマンド))、コマンドの実行時間をさまざまな形式で指定することが出来ます。具体的には、以下の通りで、設定可能な値については、(表1)を参照して下さい。 なお、初めてcrontabファイルを編集した場合には、何も書かれていませんので、以下のフォーマットで記述します。また、各フィールドでは、 '*' を使用することが可能です。 分 時 日 月 曜日 コマンド
また、crontabファイルでは、リストと範囲の指定を行なうことができます。リストとは、一つのフィールドに対して、複数の値を設定することで、範囲とは、一つのフィールドに対して、特定の範囲の値を設定することです。そして、リストと範囲は、一つのフィールドに共存することもできます。さらに、間隔値(指定間隔に一度、処理を実行)を設定することもできます。
|
5.設定ファイル(/etc/crontab) |
■「/etc/crontab」
通常、このファイルには、以下のように、「cron.monthly」、「cron.weekly」、「cron.daily」、「cron.hourly」配下のファイルが、指定時間ごとに実行されるように設定されています。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg 具体的には、「3.crontabファイル」の 「■cron コマンドの設定」 のところでも簡単にふれましたが、このファイルを直接編集する場合には、ユーザフィールドが追加され、以下のように、7つのフィールドで形成されます。 分 時 日 月 曜日 ユーザ コマンド ■「/etc/cron.monthly、cron.weekly、cron.daily、cron.hourly」 上述の通り、これらのディレクトリは、「/etc/crontab」ファイルによって呼び出され、指定時間ごとに、配下にあるシェルスクリプトを実行します。 例えば、「/etc/cron.daily/logrotate」ファイルには、以下のように設定されています。 #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf # chmod 755 /etc/cron.daily/logrotate |
6.アクセス制御 |
■アクセス制御
cron は、デフォルトの状態では、すべてのユーザが使用することができますが、使用を制限することも可能です。方法は、使用を許可したい場合には、「/etc/cron.allow」ファイルを作成し、1行に1ユーザを記述します。反対に、使用を許可したくない場合には、「/etc/cron.deny」ファイルを作成し、1行に1ユーザを記述します。以下に、「hoge」というユーザのみ使用を許可する場合の、「/etc/cron.allow」ファイルの設定を紹介します。 # vi /etc/cron.allow hoge 詳細については、以下の表を参照して下さい。
|
7.設定例 |
■設定例
最後に、crontab の man ページに記載されているファイルの内容を紹介します。 # man 5 crontab CRON ファイルの例 # (/etc/passwd の指定に関らず) コマンド実行に /bin/sh を使用する。 SHELL=/bin/sh # (この crontabの所有者に関らず) あらゆる出力を `paul' にメールする。 MAILTO=paul # # 毎日、日付変更の 5 分後に実行する 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # 毎月初日の 2:15pm に実行する 出力は paul にメールされる 15 14 1 * * $HOME/bin/monthly # 週末の午後 10 時に実行してジョーを心配させる 0 22 * * 15 mail s "午後10時だ" joe%ジョー、%%お前の子どもはどこだい?% 23 023/2 * * * echo "毎日 0,2,4..時 23 分に実行する" 5 4 * * sun echo "日曜 4 時 5 分に実行する" |
8.改版履歴 |
■改版履歴
|
8.参考 |
■Linux動作確認情報
Express5800シリーズ Linux OSの動作確認情報 公開中 |