Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Cronを数十秒ごとに実行したいがsleepを何行も書きたくない場合、forとseqを組み合わせるとワンライナー風にできてベネ

接続先装置の都合にあわせ、平日の日中に1分毎に実行すればいいスクリプトがありました。
ならcronでよかろうと、ササっと書いてお渡しし、半年ノートラブルで稼働しめでたしめでたし……だったらよかったのですが……色々あって、急遽実行回数を増やすことに。

Cronは分単位が最小です。
一応、実行を秒にしたい場合はsleepを咬ませる方法が知られていますが……何個も並べる事になるので可読性が落ちる……と調べたところ、でてきました。

実際のところ

20秒に一回、pwdを実行するには以下のように。
bash……というか、シェルスクリプト一般の都合上、プロセスの実行順で処理されることから、正確な時刻でない事には注意。

* * * * * for i in `seq 0 20 59`;do (sleep ${i}; pwd) & done

Cronの部分、スクリプトが指定できるならforが使えるのは確かに道理ですね……!

相手先が許すなら、もっと細かい単位も可能ではあります。
ミリ秒もusleepコマンドという最高にCOOLなのがあるものの、そこまでやるならC言語なりで書いた方が良いような気がします。