毎月第2金曜など特定の曜日にシェルを実行する方法

シェル内で曜日判定を行う

定期ルーチン処理の自動化を行う際の参考に!シェル内で曜日判定を行う方法。

今回は毎月第3金曜日にシェルを自動で処理したいなど、定期処理を自動化するという場合に役立つ方法を記載します。

はじめに

今回の内容はcronだけではできない条件などの場合に使用します。毎月1日や毎週木曜などcronだけで実現可能な場合は必要ありません。また、今回の処理の概要は、一定期間シェルの起動はcronで行い、条件が一致した日だけ実際の処理を流すというものになります。

シェル内で曜日判定を行う方法

シェルの処理の中で曜日判定を行うには、以下の内容を使用します。


#曜日判定(以下)水曜日のみ実施する場合

a=` date +%w`
if [ "$a" == "3" ]
then

#ここにメイン処理を入れる

fi

簡単に説明すると、処理が流れている日の曜日をdateコマンドのフォーマット「%w」で指定して取得し、その取得した値が指定した値と同じであれば後続処理を流すというものです。なお、「%w」は曜日を0~6の値とし、0は日曜、6は土曜日となります。

cronの設定内容

cronは該当する期間を登録します。

例1.毎月第3水曜の22時に/usr/loval/bin/sample.shという処理を起動する※曜日の判定はシェル内で行う


00 22 15-21 * * /usr/loval/bin/sample.sh > /dev/null 2>&1

例2.毎月第2土曜の1時に/usr/loval/bin/sample.shという処理を起動する※曜日の判定はシェル内で行う


00 01 8-14 * * /usr/loval/bin/sample.sh > /dev/null 2>&1

ポイントは、第1○曜日などを指定する場合は日付の範囲を「1-7」、第2○曜日は「8-14」第3○曜日は「15-21」第2○曜日は「22-28」とすることです。
なお、他の処理と重複してはいけない場合などは実施タイミングに注意しましょう。(毎月1日に月次処理を行っている場合に、第1週で処理を登録すると、月によっては処理が重複してしまう場合などがあります)また、第5週や28日以降などが無い月もありますので、その点も考慮が必要です。

 

まとめ

処理の自動化を行う場合の注意点として、処理中にはその場にいないことが多いと思います。そのため、必ず検証はしっかり行い(本番環境での実行時は1回目は立ち会うことをオススメします)、処理がエラー時の検知・通知が行えるようにすることが大切です。

  • このエントリーをはてなブックマークに追加

関連記事

コメントは利用できません。

ページ上部へ戻る