このセクションでは自宅サーバーとしてLinuxを操作するうえでよく使うコマンドについて初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
抜粋Linuxコマンドリファレンス

ディレクトリとファイルの操作+

ディスクとパーティションの操作+

テキストの操作+

ユーザーとアカウント管理+

ネットワークの管理+

システム・プロセス管理

ホスト機の電源オフと再起動
デーモンの自動起動設定
プログラムを予約して実行する
稼働中のプロセスを表示する

その他のコマンド+


crond〜プログラムを決まった時刻に実行する

予め設定されたスケジュールに従って コマンド アプリケーション シェル スクリプト などを実行するコマンドです。

ただし、実際にはシェル プロンプト から crond を実行するケースはほとんどなく、通常は デーモン として動作させておきます crondデーモンの稼動について(WBEL3) crondデーモンの稼動について(CentOS3) crondデーモンの稼動について(WBEL4) crondデーモンの稼動について(CentOS4) crondデーモンの稼動について(CentOS5)

設定は通常、 "/etc/crontab" に直接記述するか、 "/etc/crontab" で指定されたディレクトリに予約実行ファイルを配置しておきます。

"/etc/crontab" の編集及び デフォルト で準備されている予約実行ファイルを格納するディレクトリの操作は root アカウント のみ可能です。

以下にデフォルトの "/etc/crontab" の内容を示します。

SHELL=/bin/bash      ...(1)
PATH=/sbin:/bin:/usr/sbin:/usr/bin   ...(2)
MAILTO=root        ...(3)
HOME=/          ...(4)

# 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

(1) は、プログラムを実行するときに用いられるデフォルトのシェルです。シェルの種類が指定されていないスクリプトなどを実行するときに参照されます。もちろん LinuxOS 標準の bash が指定されています。

(2) はデフォルトの パス 名です。ここに記述されたディレクトリ内の実行ファイルはパス名を省略して記述することが可能です パスが通っているとは

絶対パス名 ":" で区切って任意のディレクトリを追加記述することもできますが、ここに記述されているデフォルト以外のパスを追加すると、 パスが通っていないディレクトリの実行ファイル のような問題が起こる可能性がありますので、通常はデフォルトのまま使用してください。

(3) は実行結果のレポート先のアカウントです。

任意の実行ファイルをシェルプロンプトから実行するとき、多くの実行ファイルは例えば、

[tanaka@web1 ~]$ ping 192.168.100.1 -c 4Enter
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.   ↓出力結果ここから
64 bytes from 192.168.100.1: icmp_seq=0 ttl=64 time=0.602 ms
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.444 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.443 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.599 ms

--- 192.168.100.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3013ms
rtt min/avg/max/mdev = 0.443/0.522/0.602/0.078 ms, pipe 2   ↑出力結果ここまで
[tanaka@web1 ~]$

のように何らかの実行結果を 標準出力 します。

crondはこういった本来画面上に出力される結果を電子メールで送信する機能を持っていて、デフォルトでは (3) の設定のように root 宛てになっています サーバー管理レポートについて

メールによるレポートを必要としない場合は MAILTO="" と記述します。設定そのものを削除してしまうと "/etc/crontab" の所有者、つまり root 宛てにメールが送られますので注意してください。ただ、crondはデフォルトでサーバー管理に大切なレポートを送るようになっていますので、特別な理由がない限りは必ず受信するようにしてください。

(4) はcrondによりプログラム実行されるときの カレント ディレクトリの指定です。

デフォルトでは "/" つまりルートディレクトリに設定されています。これを変更すると既存の予約実行ファイルが動作しなくなることがありますので変更してはいけません。

なお、 "#" 以降はコメントとして無視されますので、説明や設定を一時的に使用中止したいときに利用してください。

"/etc/crontab"への記述方法について

"/etc/crontab" への記述は以下のような書式で行います。

/etc/crontabへの記述例
"/etc/crontab"への記述例

書式は全部で7つのフィールドから成り、それぞれのフィールドはスペースで区切ります。

左から6番目までのフィールドには一つのパラメータの中にスペースが入ってはいけませんが、7番目(つまり最後)の「実行プログラム」フィールドにはスペースが入っても構いません。

左から5つのフィールドは、その「実行プログラム」が実行される日時を設定します。

これらのフィールドに "*" ワイルドカード が指定されている場合は 「すべて」 を意味します。

従って上の例では、

「毎月、毎週、毎日、午前4時2分に実行する。」

と設定されていることになります。

また、これらのフィールドのパラメータは、 "-" で繋いで範囲を指定したり、 "," で区切ったりして複数を指定することもできます。

例えば、

30 0,4,8,12,16,20 * * 1-5 root ....

と記述すると、

「毎週月曜から金曜日まで、0時30分、4時30分、8時30分、12時30分、18時30分、20時30分に実行する。」

という意味になります。

また任意のパラメータに対して、 "/[整数]" と指定すると、[整数]だけパラメータの数字が飛んで実行が指定されます。

例えば先の例は見方を変えれば「4時間間隔で実行」ですから、

30 */4 * * 1-5 root ....

でも同じ意味になります。また、

3-54/10 * * * * root ....

と記述すると、「*時13分、*時23分、....」という具合に、常に10分おきに実行を指定できることになります。

6番目のフィールドにはそのプログラムを実行する アカウント を記述します。

一般的にいうと、プログラムは可能な限り一般のアカウントで実行するのが理想ですが、 "/etc/crontab" に記述するようなプログラムは普通 root でしか実行できないものがほとんどのはずです。従ってここは通常 root になります。

7番目のフィールドには実行するプログラムを記述します。

書式としては シェル プロンプト で、

[root@web1 ~]#

に続いて記述する場合と考え方は同じです。

ただし、 パスが通っていないディレクトリの実行ファイル のような問題を避けるために、 コマンド やスクリプトは可能な限り 絶対パス で記述することをおすすめします。

例えば、

[root@web1 /]# ls -l /var/log/httpd | grep error lsコマンドについて grepコマンドについて

というコマンドの実行結果をcrontabに予約する場合は、

右は、 「毎日午前3時に httpd のエラーログファイルの一覧をroot宛てにメールする」 という動作になります。お解りでしょうか。
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

# Error Log List Report
0 3 * * * root /bin/ls -l /var/log/httpd | /bin/grep error

と、コマンド部分の ls grep を絶対パスで記述します。

"run-parts"の利用について

"/etc/crontab" に予め記述されている、

# 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

の四つの設定に使われている run-parts

「後に記述されているディレクトリの中の実行ファイルをすべて実行する」

という シェル スクリプト です。

本来シェルスクリプトには実行に用いるシェルの種類を指定したほうが望ましいので、先頭行に #!/bin/bash のように記述しておくのが普通です。

例えば、 "errorloglist" というファイル名で

/bin/ls -l /var/log/httpd | /bin/grep error

という内容の テキスト ファイルを作成し、 chmod コマンドで実行属性の パーミッション を与え パーミッションについて 、ディレクトリ "/etc/cron.daily" 以下に配置します。

すると "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" を書き換える訳ではありませんから、実行したいスクリプトをディレクトリに入れるだけ、あるいは実行を中止したいスクリプトを他のディレクトリに移動するだけで有効/無効を選択できますので面倒がありません。

また、このrun-partsから実行するスクリプトは、必ず実行属性が設定されていなければなりません パーミッションについて

従って、これらのディレクトリに格納された個々のスクリプトは、その実行属性を意図的にON/OFFすすることでも、動作の有効化/無効化を切り替えることが可能です。

crondの設定の反映方法

crond は多くの デーモン プログラムと同じく、設定に修正を行った場合は再起動するか、設定の再読み込み操作を行わなければその内容は反映されません。

"/etc/crontab" の設定の修正を行った場合は、必ず以下のいずれかの方法で設定を反映させてください。

[root@web1 ~]# /etc/init.d/crond restart  ←crondの再起動
crondを停止中:                      [ OK ]
crondを起動中:                      [ OK ]
[root@web1 ~]#

[root@web1 ~]# /etc/init.d/crond reload  ←crondの設定の再読み込み
cronデーモン設定を再読み込み中:              [ OK ]
[root@web1 ~]#

crondは、 httpd メールサーバー デーモン のように、設定の反映がすぐに確認できるものではありませんから、ついこの作業を忘れがちになりますので注意してください。

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。