クーロンで1分より短いタスクを実行するシェルスクリプト

シェルスクリプト プログラミング
Books on wooden desk table and abstract background. Education background. Copy Space. Back to school

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..」と書いてみましたが、「`」などの記号が使えないので失敗しました。

シェルスクリプトを作成しておいて、それを使いまわしていくのが良さそうだと思います。

コメント

タイトルとURLをコピーしました