cronを秒間隔で実行するための方法

サーバーで自動的にプログラムを実行するためにはcronを用いると便利です。通常は分間隔での
実行が最小単位になりますが、とある書き方をすることで秒単位で実行することができるように
なります。


crontabで設定する場合の書式は以下のようになります。

 * * * * * [実行コマンド]





設定可能な数値 上の設定の*に当たる部分は、左から順に「分 時 日 月 曜日」となります。

分 0-59
時 0-23
日 1-31
月 1-12
曜日 0-7 (0または7は日曜日)



これを見ると、デフォルトでは秒単位で設定することはできません。

しかし、sleepをこの中に書き込むことによって、秒単位で実行できるようになります。
これはとても便利です。


設定例

5秒ごとに実行したい場合

 * * * * * for i in `seq 0 5 59`;do (sleep ${i}; スクリプトのパス) & done;



10秒ごとに実行したい場合

 * * * * * for i in `seq 0 10 59`;do (sleep ${i}; スクリプトのパス) & done;



左側の時間や分のところには何も設定せず、実行コマンドを記述するところにfor文でsleepを入れながら実行したいスクリプトやコマンドを指定すれば動作します。赤で示したところに実行したい秒間隔を入れれば大丈夫です。


これに加えて、bashをログインシェルとして起動したい場合には、次のようにすれば動作します。

 * * * * * for i in `seq 0 5 59`;do (sleep ${i}; bash --login -c スクリプトのパス) & done;



bash --login -cを加えればOKです。


私が現在管理しているサーバーで、CGIから呼び出して実行するプログラムがあったのですが、ディレクトリのパーミッションやパスの問題やらで、rootでないと動きませんでした。


仕方がないので、cronで常時監視することにしました。5秒おきにcronで監視プログラムが実行され、もしあるファイルが存在すれば、監視プログラムの中で必要な処理が実行されるという内容です。


最初はcronが秒を指定して実行できないのかと思って愕然としてしまいましたが、抜け道があるものですね。これを知って助かりました。