cronとcrontab
0.改定履歴
- 1997.11.04 初版
- 1997.11.05 8章の「良くあるエラーと原因」を追加
- 1997.11.06 Tipsの追加
- 2002.03.12 Linuxの場合の情報追加
- 2002.09.04 HP-UXでcrontabを一般ユーザが使えるようになる為の方法とのリンクの追加.
1.はじめに
このドキュメントは,Solaris2.5.1でcronを利用するためにcrontabを設定する方法と,その他の関連情報を掲載する物である.
Linuxの場合の,ファイルパスの場所も追加した.
2.cronとは?
cron機能は,定期的に決められたコマンドを実行する機能であり,これによりユーザ業務の自動化,システム管理作業の自動化が実現できる.
cron機能を利用するコマンドには,次の3つがある.
コマンド | 機能 |
---|---|
crontab | 定期的にプロセスを実行する事が可能である. |
at | 指定した時間に1回だけ行なうことが出来る. |
batch |
システム負荷が低いときに実行される. キューを利用して,指定されたコマンドをキュー-bで実行させる. |
cronおよびatコマンドによってスケジュールされたコマンドはスプールファイルに格納される.
cronはデーモンプロセスであり,スプールファイルに格納されたコマンドを指定の時間に起動する.
3.crontabファイル
crontabファイルは,次の場所に保存される.
/var/spool/cron/crontabs/ユーザ名 |
Linuxの場合は,次のとおり. |
たとえば,rootユーザの場合,/var/spool/cron/crontabs/rootとなるが,これを参照すると次のようになる.
#ident "@(#)root 1.12 94/03/24 SMI" /* SVr4.0 1.1.3.1 */ # # The root crontab should be used to perform accounting data collection. # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 0 2 * * 0,4 /etc/cron.d/logchecker 5 4 * * 6 /usr/lib/newsyslog 15 3 * * * /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 |
4.crontabファイルの編集について
crontabは,前出のように“/var/spool/cron/crontabs/ユーザ名”で保存されるが,このファイルを編集するには,ファイルを直接編集するのではなくcrontabコマンドを用いる.
crontabコマンドのパラメータは次のようになる.
コマンド&パラメータ | 機能 |
---|---|
crontab -e | crontabファイルを編集する. |
crontab -r | crontabファイルの削除. |
crontab -l(える) | crontabファイルの表示. |
つまり,"crontab -e"を実行して編集することとなる. この時,エディタは環境変数EDITORで指定したものが利用される. 未設定の場合にはed(ラインエディタ)が呼ばれるので注意する. 普通は,viを設定しておけばよい.(emacsな人はemacsで良いが)
Cシェルの場合,次のように行なう.
root@duo# setenv EDITOR vi root@duo# crontab -e |
5.crontabファイルの編集内容
crontabファイルは,次のように記述されている.
15 3 * * * /usr/lib/fs/nfs/nfsfind |
このパラメータを左から解説すると,次のようになる.
引数番号 | 内容 | 設定値 |
---|---|---|
1 | 分 | 0〜59 |
2 | 時 | 0〜23 |
3 | 日 | 1〜31 |
4 | 月 | 1〜12 |
5 | 曜日 | 0〜6. 0が日曜日6が土曜日. |
6 | コマンド | フルパスで指定 |
また,これら以外に次のような設定値を設定することがえきる.
値 | 用法 | 意味 |
---|---|---|
* |
/ |
その項目が定義できるすべての数値を設定. つまりワイルドカード. |
数値1-数値2 | ハイフンで数値を繋げる | 数値1から数値2の範囲に含まれる全ての数値が対象となる. |
数値1,数値2 | カンマで数値を区切る | 同じフィールドに幾つか異なった数値を設定する場合. |
6.crontabファイルの設定例
0 17 * * * /usr/local/bin/hello |
0 17 * * 1 /usr/local/bin/hello |
0,10 17 * * 1 /usr/local/bin/hello |
0-10 17 1 * 1 /usr/local/bin/hello |
7.実行とデバッグ
- まず,実行するプログラムが単体で稼働するか,コマンドを入力して確認する.
- そのコマンドをcrontabファイルにて,時間を設定する.
- 時間になり,動作しているか確認する.
cronが時間通りに実行されたか否かは,/var/cron/logファイルの中身を参照することで確認できる.
Linuxの場合は,次のとおり. |
たとえば,/export/home/bin/test.shを19:00に実行していれば,/var/cron/logファイルが次のようになっているはずである.
< uucp 4645 c Tue Nov 4 18:41:00 1997 > CMD: /usr/lib/uucp/uudemon.poll > uucp 4656 c Tue Nov 4 19:00:00 1997 > CMD: /export/home/bin/test.sh > root 4659 c Tue Nov 4 19:00:00 1997 < uucp 4656 c Tue Nov 4 19:00:00 1997 |
もし,何らかの理由にてエラーが発生していた場合には,次のように表示されて居ることが有る.
> CMD: /export/home/bin/test.sh > root 4138 c Tue Nov 4 16:53:00 1997 < root 4138 c Tue Nov 4 16:53:00 1997 rc=1 |
この例では,コマンドの返却値が1となっており,終了値が異常となっている.
エラーの詳細がなんであるかは不明である. 詳細なエラー情報はメールで来ているので,そのメールを読むと,次のようなものが来ているハズである.
Subject: Your crontab file has an error in it unexpected end of line This entry has been ignored. |
このエラーは,crontab -eにてファイルを編集している時に,メールが送られてくる. 編集を終わればメールは来なくなるので無視すればよい.
Subject: Output from "cron" command Your "cron" job /export/home/bin/test.sh produced the following output: /export/home/bin/test.sh: logger: not found |
これにより,/export/home/bin/test.sh内に書かれているloggerというコマンドが無いというエラーであることが判る.
8.良くあるエラーと原因
手動でコマンドを実行した場合には正しく動作するが,cronで登録すると稼働しない場合が有る. その場合は,次の項目をチェックする.
- 環境変数に依存しないか?
- コマンドへのパスが切られているか?
ユーザが手動で起動する場合は,そのユーザが持っている環境変数が有効である. しかし,cronで実行する際には,その環境変数は設定されない. よって,実行対象がたった1つのバイナリモジュールでもシェルスクリプトの中に含めるなどして実行に関係する環境変数が設定されるようにしなければならない. また,シェルスクリプトから呼び出されるコマンドに関しても,同じくパスが設定されない事となるので,この場合はフルパスで記述すればよい.
9.Tips
9.1.エラーの時だけメール
例えば,プロセスの監視用で,1時間毎にチェックするようなシェルを作成した場合,異常が起きた時だけechoを使ってメッセージを出力する様に設定していれば,その結果をメールとして吐き出してくれる.
9.2.HP-UXの場合
HP-UXだと,デフォルトでは一般ユーザはcrontabを使う許可が無い.(OSのバージョンによるかも)
その場合は,ドキュメント「HP-UXでcrontabを一般ユーザに使わせる方法」を参照して,許可を与える事で使えるようになる.