cronでは設定できない特定時間の実行除外方法
~cronでは細かく設定できない部分をシェルスクリプトによって、実装したのでその記録~
背景
cronによるジョブ(シェルスクリプト)の定期自動実行は最もメジャーな手段であると思う。
ただ、cronでは特定時間だけ実行を見送るといった設定が難しい。
毎日5分おきにジョブを定期実行しているとする。
時間単位(ex.15時~16時)での除外であれば、crontabの時に「0-15,16-24」と設定すれば良い。
しかし、15時30分から16時00分はジョブ実行をしないといった設定をcrontabに指定できない(私の調べた限り設定方法が見つからなかった)。
『ある時間帯の何分間だけ除外したい』 といった場合はどうしたら良いの!?
『起動するジョブ(シェルスクリプト)で制御するしかないでしょ!』 ということでスニペットレベルで作成してみたので、その記録をここに残します。
実装内容
起動時間範囲を記載した設定ファイル(time.csv)を読み込み、現在時刻がこの起動範囲であれば、「Hello!」と出力し、それ以外であれば、「Out of time」と出力するシンプルなスニペット。
#!/bin/bash
readonly configFile="time.csv"
declare -a csv_data
currentTime=`date +"%H%M"`
while IFS=, read -a csv_data;
do
echo "From=" ${csv_data[0]}
echo "To=" ${csv_data[1]}
echo "currentTime=" ${currentTime}
if [ $currentTime -ge ${csv_data[0]} -a $currentTime -le ${csv_data[1]} ]; then
echo "Hello!"
else
echo "Out of time!"
fi
done < "${configFile}"
0000,1530
1600,2400
シェルスクリプトについて補足
- readonlyは、変数を読み込み専用とする指定。設定ファイルを誤って書き換えないように配慮してみました。
- 「declare -a」は、配列として変数を定義する指定。
設定ファイル(time.csv)の内容
第1列名が、起動させたい下限時間
第2列名が、起動させたい上限時間
実行方法
crontabで「echo_Hello.sh」定期間隔で実行するように設定すれば、15時30分から16時00分以外で「Hello!」と出力されてそれ以外であれば「Out of time」と出力される。
crontabに5分おきに実行する設定例
$ crontab -e
# 5分おきに実行
*/5 * * * * ./echo_Hello.sh
サンプルスニペットソース
このスニペット自体は、活用できる機会は少ないかもしれないけど、私のGitHubリポジトリで公開しています。
参考文献
-
日経XTECH , 2022/03/26アクセス時点
-
ゲンゾウ用ポストイット , @genzouw , 2022/03/26アクセス時点
-
プログラムの超個人的なメモ, 2022/03/26アクセス時点
Author And Source
この問題について(cronでは設定できない特定時間の実行除外方法), 我々は、より多くの情報をここで見つけました https://qiita.com/LittleBear-6w6/items/a6f0f3d88ef5dd9185a0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .