2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Cronでスケジューリング!

定期的に決まったコマンドを実行する、あるいはシェルを実行したい場合に、Cronを使って行う。ここでは、そのCronを使ったスケジューリング設定について説明する。

1.cron.hourly、cron.daily、cron.weekly、cron.monthlyを使った設定
2./etc/crontabに直接書き込む設定
3.crontabコマンドを使った設定


1.cron.hourly、cron.daily、cron.weekly、cron.monthlyを使った設定

 通常、cronはLinuxをインストールするとデフォルトでインストールされる必要不可欠な機能である。
cronは、実行時に/etc/crontabに書かれた内容を参照して実行する。したがって、2項で説明するが、スケジューリングしたいコマンド等をcrontabに直接記述すれば、本来の目的を果たすことが出来る。
だが、RedHat系のLinuxでは、crontabに直接記述することは推奨されていない。推奨されていないだけで、やってはいけないことではない。そこで、cron.hourly、cron.daily、cron.weekly、cron.monthlyによる設定を説明する。その前に、以下は/etc/crontabの内容を示す。

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 /home/httpd/html/mrtg/mrtg.cfg

01 4 * * 0 root /usr/bin/webalizer

cron.hourly、cron.daily、cron.weekly、cron.monthlyは、crontabの中でスケジューリングされていて、各ディレクトリになている。crontabの書き方の説明は2項で行うのでここでは、①~④を説明する。

①のcron.hourlyは、毎時**時01分おきに実行する
②のcron.dailyは、毎日AM 4時02分に実行する
③のcron.weeklyは、毎週日曜日AM 4時22分に実行する
④のcron.monthlyは、毎月1日のAM 4時42分に実行する

と言う意味になる。したがって、自分の実行したいスケジューリングのディレクトリに実行したいシェルスクリプトを入れておく。例えば、毎時**時01分おきにnslookupを実行する場合、は以下のようにする。

# cd /etc/cron.hourly

# vi lookup.cron

#!/bin/sh
nslookup www.kozupon.com

# chmod 755 lookup.cron

こんな感じで、シェルファイルを作りディレクトリに置いておけば、実行できる。もちろん、実行時間を変えることも出来る。次の2項で説明する。ファイルに実行権を与えるのを忘れずに!


2./etc/crontabに直接書き込む設定

 もう一つの、方法は直接/etc/crontabに書き込む方法がある。ここでは、その方法を説明する。

分 時 日 月 曜日 ユーザ  実行コマンド

01 4  *  *  0    root     /usr/bin/webalizer

分 : 01~59
時 : 1~24
日 : 1~31
曜日: 0~7 0と7(日曜)~6(土曜)

この場合は、毎日AM 4時01分に/usr/bin/webalizerコマンドを実行するようになっている。

例えば、絶対時間ではなく、単に10分おきにコマンドを実行したい場合は

*/10 *  *  *  *    root     /usr/bin/webalizer

1分おきにコマンドを実行。

* * * * *    root     /usr/bin/webalizer

毎時0分(1時間に一回)にコマンドを実行。

0 * * * *    root     /usr/bin/webalizer

1日一回、夜中の2時(午前2時)にコマンドを実行。

0 2 * * *    root     /usr/bin/webalizer

日曜の朝、午前7時にコマンドを実行。

0 7 * * 0    root     /usr/bin/webalizer

日中9時30分~17時30分の間は、毎時30分にコマンドを実行。

30 9-17 * * *    root     /usr/bin/webalizer

毎週月曜日と木曜日の8時15分と12時15分のみコマンドを実行。

15 8,12 * * 1,4    root     /usr/bin/webalizer

このように書く。

*/10 *  *  *  *    root     /usr/bin/webalizer > /dev/null 2>&1    ←※

※印、これはエラー出力をしたくないときの記述。


3.crontabコマンドを使った設定

 cronの設定は、crontabコマンドを使っても設定できる。正式には本来こちらの使い方をすべきかと思う。
但し、/etc/crontabファイルを直接編集したりcrontabコマンドを使ったりで編集方法を混在させないこと!これを行うとcronの設定の不整合が起きてエラーを吐く。編集方法はどちらか一方で行うこと。

■ 現在の設定を見る

# crontab -l

■ 設定を変更する

# crontab -e

CTRL+Cで終了する。

■ 設定内容の削除

# crontab -r

以上

コメント