cronは最低1分単位
定期的に実行したいタスクにはcronを使いますが、実行間隔は最短で1分です。
それより短い間隔、例えば10秒ごとに実行したい処理はどうすればよいのでしょうか。
やり方はいろいろあると思いますが、自分が実際に使った方法をメモとして残しておきます。
非同期シェルスクリプト
クーロンでシェルスクリプトを実行するように設定し、シェルスクリプト内で10秒ごとに処理を行うという方法です。
処理 -> sleep
という流れでは処理に掛かった時間で微妙にズレが発生するので、非同期で処理するようにします。
#!/bin/bash
for i in `seq 1 6`;
do
exec {RESULT_FD}< <( php a.php );
exec {RESULT_SLEEP}< <( sleep 10 );
cat <&${RESULT_FD};
cat <&${RESULT_SLEEP};
done;
exec と プロセス置換 を利用した非同期処理です。
この場合、10秒ごとに6回 php a.php を実行します。
これをcronで1分ごとに実行するよう設定すれば、10秒ごとに実行されるようになります。
まとめ
最初はcronに直接「for i in..」と書いてみましたが、「`」などの記号が使えないので失敗しました。
シェルスクリプトを作成しておいて、それを使いまわしていくのが良さそうだと思います。
コメント