sh

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

shell scriptを時間指定で実行したいときに cronjob や at など方法があると思います。 ただKubernetes環境で実行したいときはどうでしょうか? shell scriptを実行するだけなら cronjob リソースを使えば良いのですが、今回は対象アプリのsidecarとして載せる必要がありました。この場合は Deployment リソースなので、shell scriptに時間トリガーを仕込む必要がありました。 時間を integer に変換して比較・・・など色々試行錯誤しましたが、stackoverflowのHow to check if the current time is between 23:00 and 06:30に素晴らしいアイデアがありました。 結論は date を string で取り出して、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の間などの条件を使いたいときは正規表現です。
Read more