読者です 読者をやめる 読者になる 読者になる

【JobScheduler格闘戦記】祝日カレンダーの作成

(JobScheduler Run Time No Working Days Include Files)
Windows標準のタスクスケジューラでも、実行する曜日を指定することはもちろん可能です。平日のみ実行させたいのであれば、月~金のチェックを入れて実行時刻を指定するだけです。

しかし、祝日の設定は出来ません。しかも、日本の場合は結構祝日が増えるので、祝日カレンダーの設計は必須事項

「JobSchedulerでカレンダーを持つことが出来て、祝日もバッチリですっ!」って思ってたらなんか出来ない、出来るけど想像したのと違う

f:id:orzmakoto:20160403185653p:plain
"Run Time" -> "No Working Days"の設定で実行しない日(祝日)を指定すればその日は実行しない。
これ全部の"Run Time"や"Scheduler"に記載するのはメンテナンス性を考えて論外。


"No Working Days"の画面に"Include Files"があるからXMLに記載してそれを読みこめば良さそう
でもそのXMLのフォーマットについての説明が例のごとく見当たらず・・・

やりたいこと

平日の夜8時にJOBを実行したい
※土日、祝日は実行しない

実現方法

ここでは、JOBに対して"Run Time"の設定を記載しますが、実際は"JOB Chain"などになると思います。

1. any WeekDayの設定

  • 月~金を設定

f:id:orzmakoto:20160403190652p:plain

  • 夜8時に実行を設定
Start Time Single Start 20:00:00
When Holiday suppress execution(休日はスキップ)

f:id:orzmakoto:20160403190812p:plain

2. No Working Daysの設定
個別に祝日を指定するのではなく、祝日を列挙したXMLファイルを指定します。
今回は、liveフォルダの下に"jp.holiday.xml"を作成しました。(4月4日を祝日として指定)

<?xml version="1.0" encoding="ISO-8859-1"?>
<holidays>
    <holiday date="2016-04-04"/> 
</holidays>

f:id:orzmakoto:20160403191535p:plain
"Include Files"で作成してXMLファイル"jp.holiday.xml"指定し、"Add File"を押下
ほぼお約束状態になっていますが、ファイル名は、"***.holiday.xml"の形式である必要があります。

3. 保存/結果確認
今日は、2016年4月3日(日)で翌日(月曜)を祝日と指定したので次回実行は、2016年4月5日20:00:00となります。
f:id:orzmakoto:20160403192220p:plain
ちゃんと次回開始が2016年4月5日となっていることが確認できます。

ちょこっとハマったのが、祝日を列挙したjp.holiday.xmlを変更した場合ですが、JobSchedulerが変更を検知してくれませんでした。
変更後は、JobSchedulerのサービスを再起動する必要があります。

参考
SOS JobSchedulerでジョブチェーンの実行時間を指定する | artisan edge thinking
→"When Holiday"の設定の説明など日本語訳で解説されており大変参考になりました。

JobScheduler / Discussion / Help:Problems with holiday include file
→Include Filesについてやりとりがありこのやりとりをみて解決


orzmakoto.hatenablog.com