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の間などの条件を使いたいときは正規表現です。
#!/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
簡単なことですが知っとくと便利なことでした。