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 スクリプトを指定 |
また、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