cronで利用すると便利な、祝日や平日(営業日)かの判定方法

Linux の cronで利用すると便利な、祝日や平日(営業日)かの判定方法です。

2019.9.19 修正
cronでの実行例で、%を \% に修正しました。


内閣府に次のページがあります。

国民の祝日について - 内閣府

ここに、「昭和30年(1955年)から平成32年(2020年)国民の祝日(csv形式:19KB)」とのリンクがあり、csv形式で祝日が記載されたファイルがダウンロードできます。

下記のように、日付と祝日の内容が記載されています。


国民の祝日・休日月日,国民の祝日・休日名称
1955/1/1,元日
1955/1/15,成人の日
1955/3/21,春分の日
    :


これを用いて、祝日や平日(営業日)の判定をします。


準備


先に説明した、国民の祝日が記載されたcsvファイルをダウンロードします。
昭和30年(1955年)からの祝日が記載されていますが、行が多いので、2010年以降のものだけ抜き出し、holidays.csv を作成しておきます。


wget -q -O - https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv | nkf | grep -e "^20[12]" > holidays.csv


祝日/休日の判定方法


次のようにすると、コマンド実行日が祝日の場合、COMMAND を実行します。


grep `date "+%Y/%-m/%-d"`, holidays.csv > /dev/null && COMMAND


cron で次のようにすると、休日(土日・祝日)に COMMAND が実行されます。
土日の場合は無条件に COMMAND を実行、月~金の場合は、祝日判定して COMMAND を実行します。


30 8 * * 0,6 COMMAND
30 8 * * 1-5 grep `date "+\%Y/\%-m/\%-d"`, holidays.csv > /dev/null && COMMAND


なお、holidays.csv に会社の休日(夏季休暇や、年末年始休暇)を追加しておけば、営業日以外の実行ができます。


平日(営業日)の判定方法


次のようにすると、コマンド実行日が祝日以外の場合、COMMAND を実行します。
ただし、土日の場合も COMMAND が実行されます。


grep `date "+%Y/%-m/%-d"`, holidays.csv > /dev/null || COMMAND


cron で次のようにすると、平日(営業日)に COMMAND が実行されます。
月~金の場合に祝日判定し、祝日では無い場合に COMMAND を実行します。


30 8 * * 1-5 grep `date "+\%Y/\%-m/\%-d"`, holidays.csv > /dev/null || COMMAND



参考


国民の祝日について - 内閣府
https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv
シェルスクリプトで平日なのか土日祝日なのかを判定してみる - かべぎわブログ


ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント