Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2811

cronでは設定できない特定時間の実行除外方法

$
0
0
~cronでは細かく設定できない部分をシェルスクリプトによって、実装したのでその記録~ 背景 cronによるジョブ(シェルスクリプト)の定期自動実行は最もメジャーな手段であると思う。 ただ、cronでは特定時間だけ実行を見送るといった設定が難しい。 毎日5分おきにジョブを定期実行しているとする。 時間単位(ex.15時~16時)での除外であれば、crontabの時に「0-15,16-24」と設定すれば良い。 しかし15時30分から16時00分はジョブ実行をしないといった設定をcrontabに指定できない(私の調べた限り設定方法が見つからなかった)。 『ある時間帯の何分間だけ除外したい』 といった場合はどうしたら良いの!? 『起動するジョブ(シェルスクリプト)で制御するしかないでしょ!』 ということでスニペットレベルで作成してみたので、その記録をここに残します。 実装内容 起動時間範囲を記載した設定ファイル(time.csv)を読み込み、現在時刻がこの起動範囲であれば、「Hello!」と出力し、それ以外であれば、「Out of time」と出力するシンプルなスニペット。 echo_Hello.sh #!/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}" time.csv 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分おきに実行する設定例 5分おきに実行する設定例 $ crontab -e # 5分おきに実行 */5 * * * * ./echo_Hello.sh サンプルスニペットソース このスニペット自体は、活用できる機会は少ないかもしれないけど、私のGitHubリポジトリで公開しています。 参考文献 日経XTECH , 2022/03/26アクセス時点 ゲンゾウ用ポストイット , @genzouw , 2022/03/26アクセス時点 プログラムの超個人的なメモ, 2022/03/26アクセス時点

Viewing all articles
Browse latest Browse all 2811

Trending Articles