|
|
抜粋Linuxコマンドリファレンス
|
ディレクトリとファイルの操作+ディスクとパーティションの操作+テキストの操作+ユーザーとアカウント管理+ネットワークの管理+システム・プロセス管理ホスト機の電源オフと再起動デーモンの自動起動設定プログラムを予約して実行する稼働中のプロセスを表示するその他のコマンド+ |
crond〜プログラムを決まった時刻に実行する予め設定されたスケジュールに従って コマンド や アプリケーション 、 シェル スクリプト などを実行するコマンドです。
ただし、実際にはシェル
プロンプト
から
crond
を実行するケースはほとんどなく、通常は
デーモン
として動作させておきます
設定は通常、 "/etc/crontab" に直接記述するか、 "/etc/crontab" で指定されたディレクトリに予約実行ファイルを配置しておきます。 "/etc/crontab" の編集及び デフォルト で準備されている予約実行ファイルを格納するディレクトリの操作は root アカウント のみ可能です。 以下にデフォルトの "/etc/crontab" の内容を示します。
(1) は、プログラムを実行するときに用いられるデフォルトのシェルです。シェルの種類が指定されていないスクリプトなどを実行するときに参照されます。もちろん LinuxOS 標準の bash が指定されています。
(2)
はデフォルトの
パス
名です。ここに記述されたディレクトリ内の実行ファイルはパス名を省略して記述することが可能です
絶対パス名
を
":"
で区切って任意のディレクトリを追加記述することもできますが、ここに記述されているデフォルト以外のパスを追加すると、
(3) は実行結果のレポート先のアカウントです。 任意の実行ファイルをシェルプロンプトから実行するとき、多くの実行ファイルは例えば、
のように何らかの実行結果を 標準出力 します。 |
||||||||||
|
|
crondはこういった本来画面上に出力される結果を電子メールで送信する機能を持っていて、デフォルトでは
(3)
の設定のように
root
宛てになっています
メールによるレポートを必要としない場合は MAILTO="" と記述します。設定そのものを削除してしまうと "/etc/crontab" の所有者、つまり root 宛てにメールが送られますので注意してください。ただ、crondはデフォルトでサーバー管理に大切なレポートを送るようになっていますので、特別な理由がない限りは必ず受信するようにしてください。 (4) はcrondによりプログラム実行されるときの カレント ディレクトリの指定です。 デフォルトでは "/" つまりルートディレクトリに設定されています。これを変更すると既存の予約実行ファイルが動作しなくなることがありますので変更してはいけません。 なお、 "#" 以降はコメントとして無視されますので、説明や設定を一時的に使用中止したいときに利用してください。 "/etc/crontab"への記述方法について"/etc/crontab" への記述は以下のような書式で行います。
"/etc/crontab"への記述例 書式は全部で7つのフィールドから成り、それぞれのフィールドはスペースで区切ります。 左から6番目までのフィールドには一つのパラメータの中にスペースが入ってはいけませんが、7番目(つまり最後)の「実行プログラム」フィールドにはスペースが入っても構いません。 左から5つのフィールドは、その「実行プログラム」が実行される日時を設定します。 これらのフィールドに "*" の ワイルドカード が指定されている場合は 「すべて」 を意味します。 従って上の例では、 「毎月、毎週、毎日、午前4時2分に実行する。」 と設定されていることになります。 また、これらのフィールドのパラメータは、 "-" で繋いで範囲を指定したり、 "," で区切ったりして複数を指定することもできます。 例えば、
と記述すると、 「毎週月曜から金曜日まで、0時30分、4時30分、8時30分、12時30分、18時30分、20時30分に実行する。」 という意味になります。 また任意のパラメータに対して、 "/[整数]" と指定すると、[整数]だけパラメータの数字が飛んで実行が指定されます。 |
||||||||||
|
|
例えば先の例は見方を変えれば「4時間間隔で実行」ですから、
でも同じ意味になります。また、
と記述すると、「*時13分、*時23分、....」という具合に、常に10分おきに実行を指定できることになります。 6番目のフィールドにはそのプログラムを実行する アカウント を記述します。 一般的にいうと、プログラムは可能な限り一般のアカウントで実行するのが理想ですが、 "/etc/crontab" に記述するようなプログラムは普通 root でしか実行できないものがほとんどのはずです。従ってここは通常 root になります。 7番目のフィールドには実行するプログラムを記述します。
に続いて記述する場合と考え方は同じです。
ただし、
例えば、
というコマンドの実行結果をcrontabに予約する場合は、 |
||||||||||
| 右は、 「毎日午前3時に httpd のエラーログファイルの一覧をroot宛てにメールする」 という動作になります。お解りでしょうか。 |
と、コマンド部分の ls と grep を絶対パスで記述します。 "run-parts"の利用について"/etc/crontab" に予め記述されている、
の四つの設定に使われている run-parts は 「後に記述されているディレクトリの中の実行ファイルをすべて実行する」 |
||||||||||
| 本来シェルスクリプトには実行に用いるシェルの種類を指定したほうが望ましいので、先頭行に #!/bin/bash のように記述しておくのが普通です。 |
例えば、 "errorloglist" というファイル名で
という内容の
テキスト
ファイルを作成し、
chmod
コマンドで実行属性の
パーミッション
を与え
すると "errorloglist" は同じディレクトリの中にある他の実行ファイルとともに 「毎日午前4時2分に実行」 されることになるわけです。 同様に "/etc/cron.hourly" は「毎時1分」、 "/etc/cron.weekly" は「毎週日曜日午前4時22分」、 "/etc/cron.monthly" 「毎月一日午前4時42分」にそれぞれ実行すべき実行ファイルを格納すべきディレクトリであることはお分かりと思います。 利用方法にもよりますが、できれば "/etc/crontab" に直接実行プログラムの内容を記述するよりもこちらの方法をおすすめします。 なぜなら、この方法によれば "/etc/crontab" の記述を間違える危険性がなく、スクリプトに間違いがあって実行できなくても他の予約スクリプトに影響を与えないからです。 また、設定を "/etc/crontab" に直接記述した場合には、記述や修正後に必ずcrondの再起動または設定の再読み込み作業を行わなければ設定は有効になりません。 しかしこのrun-partsを利用した方法は、直接 "/etc/crontab" を書き換える訳ではありませんから、実行したいスクリプトをディレクトリに入れるだけ、あるいは実行を中止したいスクリプトを他のディレクトリに移動するだけで有効/無効を選択できますので面倒がありません。 |
||||||||||
|
|
従って、これらのディレクトリに格納された個々のスクリプトは、その実行属性を意図的にON/OFFすすることでも、動作の有効化/無効化を切り替えることが可能です。 crondの設定の反映方法crond は多くの デーモン プログラムと同じく、設定に修正を行った場合は再起動するか、設定の再読み込み操作を行わなければその内容は反映されません。 "/etc/crontab" の設定の修正を行った場合は、必ず以下のいずれかの方法で設定を反映させてください。
crondは、 httpd や メールサーバー の デーモン のように、設定の反映がすぐに確認できるものではありませんから、ついこの作業を忘れがちになりますので注意してください。
|
|
|
| このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。 |
| ”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。 |