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