Ubuntu 22.04: cron で 10 秒おきに script を実行したい

 
便利だったのでメモ。
cronは最低1分おきにしか実行出来ないけど、そのcronで実行する script を工夫する。

例えば 10 秒おきに現在の時刻を吐き出す script を書く。
これがホームディレクトリにおく。

/home/orenomemo/date.sh

#!/bin/bash
 
export PATH=/bin:/usr/bin:/usr/local/bin
export DIRECTORY="/home/orenomemo"
cd ${DIRECTORY}

while true; do
    CURTIME=$(date "+%Y-%m-%d %H:%M:%S")
    echo "current time: ${CURTIME}" >> date.log
    sleep 10
done

これを cron で毎分実行する、という事なんだけど何も考えないと重複実行になってしまう。
なので以下のようにする。

* * * * * /usr/bin/pidof -x /home/orenomemo/date.sh || /home/orenomemo/date.sh &

pidof で pid の存在を確認したら何もしない、pid がない場合だけ実行する。