LoginSignup
2
2

More than 1 year has passed since last update.

cronを使わず定期的にコマンドを実行する小技

Posted at

シェルスクリプトだけでコマンドを定期実行したい

Dockerコンテナでバックアップなどのコマンドを定期的に実行したいときがありますが、cronを使うのは手順が多くて面倒に感じていました。

そこでシンプルなシェルスクリプトで、定期的にコマンドを実行をする方法を考えたのでメモします。

#!/bin/bash

# 12時間ごとに実行する場合(秒数)
EVERY=$(( 60 * 60 * 12 ))
# 日本時間(+0900)に調整
OFFSET=$(( 60 * 60 * 9 ))

while true; do
  # 次のタイミングまでスリープ
  TS=$(( $(date "+%s") + $OFFSET ))
  sleep $(( ($TS / $EVERY + 1) * $EVERY - $TS ))

  echo "ここで好きなコマンドを実行"
done

上の例では毎日、日本時間の0時と12時に指定のコマンドを実行します。

機能面でcronにはもちろん敵いません。でも「ラフにn時間ごとみたいな定期実行したい」、みたいなときはこの方がわかりやすいかなと思いましたが、どうでしょうね。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2