cronの使い方

 

 

1.はじめに

cronは、UNIX系OSに、装備されている自動実行ツールの一つです。
指定したタイミングで、繰り返し実行されるので、よく使われます。
デフォルトでも、各種ログの、整理を行っています。

 


2.お約束の使い方

 

設定ファイルの実体は、/etc/crontab ですが、これを、直接いじることは、
マナー違反です。

crontab -e

とやって、デフォルトのエディタを起動させて、その上で追加するのが
ルールです。
ただ、管理者権限なら、編集できちゃいます。

紛らわしいですが、crontabというツールを使って、/etc/crontabという
テキストファイルに、変更を加えるんです。
(名前を変えろよ!)

ただ実際には、このcrontab(ツールの方)を使って追加すると、
管理者といえども、/etc/crontab(テキストの方)には追加されずに、
/var/spool/cron/crontabs/ (Debianの場合)に、ユーザー名のファイルが
出来て、そちらに追加されるようです。


 

3.crontabの書式

 

後の方でも、この書式は出てくるので、一応書きます。

min hour day month week command 

(凡例)
min   分を指定   (*)
hour   時を指定   (*)
day   日を指定   (*)
month   月を指定   (*)
week   曜日を指定。0を日曜日とし、0-7まで   (*)
command   実行するコマンド or スクリプトを指定    
(日経Linux コマンド集より抜粋)

(*)という記号があるものは、ワイルド・カードを使用できます

また、crontabのman(5)には、

minute   0-59
hour   0-23
day of month   1-31
month   1-12 (or names, see below)
day of week   0-7 (0 or 7 is Sun, or use names)

とありました。

実際に、/etc/crontabにある例ですと、

25 6    * * *   root    test -e /usr/sbin/anacron....(略)

となっています。
これだと、ユーザーrootで、毎朝6:25に、実行する設定です。

2 8-20/3 * * *  root    hogehoge.sh

というのも可能です。
これだと、8:02、11:02、14:02、17:02、20:02に、3時間置きに実行します。

05 18-23,0-7    * * Mon,Tue,Wed,Thu,Fri /usr/sbin/sendmail -q
05 *            * * Sat,Sun             /usr/sbin/sendmail -q
(JF:Mail-Queue.txtより)

上記の場合、曜日は、数字で指定するはずなのに、略称で指定していますね。
こういう使い方も出来るようです。

cronで実行された場合の出力は、管理者宛メールとして、送信されます。
ですから、これが不要な場合は、下記のように、出力を捨ててください。

0 * * * *  /home/checkformail 1> /dev/null 2> /dev/null
(JF:Offline-Mailing.txtより)

またドキュメントによると、cronは、再起動させなくても、設定の変更を、
検知して、反映してくれるそうで、ただ単に変更すればいいみたいです。


 

4.お手軽作法

 

A.いつでも良い場合

毎日、週一、月一で実行させたいが、時間はいつでも良い、という場合には、
お手軽で実行できます。

/etc/crontab の内容

25 6    * * *   root    test -e /usr/sbin/anacron || run-parts -report /etc/cron.daily
47 6    * * 7   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.monthly

(説明)

test -e file   file が存在すれば真
||   または。つまり、/usr/sbin/anacronが存在しなければ、
以下の部分を実行しろと言うことになります。
run-parts file   一つのディレクトリ内に存在する、実行可能ファイルを、ファイル名の順番に、片っ端から、
実行させていくだけのツールです。

anacronは、私の環境には存在しないので、run-partsが実行されてます。
で、実行タイミングは、

/etc/cron.daily   毎日6:25
/etc/cron.weekly   毎週日曜6:47
/etc/cron.monthly   毎月1日6:52

の様になっています。
上記のmanの説明にありますように、曜日欄は、0と、7が、日曜を表すようです。

このタイミングでかまわないのなら、これらのディレクトリに、実行される
ファイル、もしくは、スクリプトを入れておけば、勝手に実行してくれます。
ただ、本当に実行できるかどうかは、コマンドラインで、確かめておいて
くださいね。

 

B.時間等は、指定したい場合

こういう時のためのディレクトリが、/etc/cron.d です。
このディレクトリの働きは、/etc/cron.monthly等とは、少し違い、crontabの
ように設定します。

この中にあるファイルの属性は、下記のようで、
-rw-r--r--  1 root     root           85 01-03-24 09:09 hogekidou.sh

内容は、

2 * * * *  root     /usr/sbin/hogehoge.sh

という形式です。

つまり、crontabに設定する書式で、テキストファイルに書き出し、適当な
ファイル名で、ディレクトリ内に置いておけば、指定タイミングで、実行して
くれるわけです。

この仕組みは、パッケージをインストールする際に、インストーラが、cronの
設定まで、可能なように作られたそうです。
とは言っても、こんな便利な仕組みを使わない手は、ありません。
しっかり、使わせてもらいましょう。


5.最後に

この項は、どちらかというと、備忘録です。
cronに関する資料は、あちこちに散在していて、そのたびごとに探し回ること
になり、面倒なので、作りました。
似たような方の参考になれば、幸いです。

 

 

2001/8/21  by CRA