sidecarのshell scriptで時間をトリガーにする

Posted on
sh k8s

shell scriptを時間指定で実行したいときに cronjobat など方法があると思います。

ただKubernetes環境で実行したいときはどうでしょうか?

shell scriptを実行するだけなら cronjob リソースを使えば良いのですが、今回は対象アプリのsidecarとして載せる必要がありました。この場合は Deployment リソースなので、shell scriptに時間トリガーを仕込む必要がありました。

時間を integer に変換して比較・・・など色々試行錯誤しましたが、stackoverflowのHow to check if the current time is between 23:00 and 06:30に素晴らしいアイデアがありました。

結論は datestring で取り出して、case で判定を行います。

#!/bin/bash
while :; do
    currenttime=$(date +%H:%M)
    echo $currenttime
    case "$currenttime" in
        (04:21)              # 04:21にbreakしてscriptを終了
            echo "break"
            break
            ;;
        (*)
            echo "*"
            ;;
    esac
    sleep 5s
done
exit 0

動作させた結果がこちらです。

$ bash test.sh
04:20
*
04:20
*
04:20
*
04:21
break

バッチリですね。02:00~04:00の間などの条件を使いたいときは正規表現です。

#!/bin/bash
while :; do
    currenttime=$(date +%H:%M)
    echo $currenttime
    case "$currenttime" in
    (0[2-4]:*)
        echo "break"
        break
        ;;
    (*)
        echo "*"
        ;;
    esac
sleep 5s
done
exit 0

簡単なことですが知っとくと便利なことでした。