cronで秒単位でアプリを起動させたい。
ご存知の通りcronでは一番短い単位で1分ごとにしかアプリを実行できない。
というわけで秒単位で起動できないかをググったら
30秒おきに稼動させたいならこうするらしい。
* * * * * myapp & sleep 30; myapp
けどこれだと5秒おきとかはcronの設定が大変なことに、、ましてや1秒おきの場合なんて、、
というわけで人生初のシェルスクリプトを書いてみました。
とてつもなくへっぽこなのは堪忍してくださいまし。
(Rubyistを目指してるものとしてはわざわざシェルスクリプト勉強せずにrubyで書けばよかったと思うが、rubyを入れてない環境でも使えるのでちょこっと便利?)
スクリプト
myappという実行ファイルがある場合
同一フォルダに下記のスクリプトを用意する
最初のほうにある変数exeとsecondを適当に書き換えて使って下さい。
myapp_cron_second.sh
#!/bin/sh # 起動させるアプリファイル exe="`dirname $0`/myapp" # 起動間隔(秒) second=5 loopMaxCount=`expr 60 / $second - 1` count=1 while [ $count -le $loopMaxCount ]; do echo "$count" if [ $count != $loopMaxCount ] then $exe & sleep $second; else $exe fi count=`expr $count + 1` done
cronには下記で登録
* * * * * /usr/local/myapp_cron_second.sh
2重起動
なお、秒単位のアプリ稼動だと2重起動してしまう可能性が高くなります。
もしアプリの性質上2重起動がNGの場合は
下記URLの方の2重起動防止スクリプトが使えそうです。
http://d.hatena.ne.jp/zenpou/20080715/1216133151
備考
ちなみに秒単位起動を実現するのにcronexecというアプリがスマートそうなんですが
安定度もわからないのとメンテナンスされてなさそうなのでやめときました。
更新履歴
- 2012/1/23 はてブコメントでa1102012さんからcrontabの*の数が違う指摘があったのを修正。