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

ALL
スポンサーリンク

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
シェルスクリプトで平日なのか土日祝日なのかを判定してみる – かべぎわブログ

コメント