タスクスケジューラの「継続時間」にハメられた

お前が勝手にハマっただけだろってな内容ですが、まぁ。


事の始まりは、こういうことをやりたいと思ったからです。
・毎週特定の曜日に
・特定の時間帯だけ
・5分間隔で実行したいタスクがある
というわけで、以下のやり方でタスクを作成。今回の話に直接関係ないタブの操作は端折ります。
まずはトリガータブ。

  1. 「設定」は「毎週」のラジオボタンにチェックを入れる。
  2. 開始日時は某日10時。
  3. 火曜日だけ動かしたいので「1」週間ごとの「火曜日」にのみチェックを入れる
  4. 「詳細設定」の「繰り返し間隔」にチェックを入れ、「5分間」を設定。ちなみにプルダウンだと最短5分しか選べないが、実はここは手入力可能なので、5分よりも短い設定も可能。
  5. 「繰り返し間隔」にチェックを入れると「継続時間」が入力可能になる。後述の設定で停止時間を設定できるから、変に早く止まっても困るし、「無制限」で設定。
  6. 10時~18時の間で動かしたいので、「停止するまでの時間」は「8時間」をチョイス。ちなみにここも手入力可能
  7. 今のところ特に期限を設けずで動かす予定なので「有効期限」にはチェックを入れない。

…という考えの下設定した結果、こういう内容になりました。



続いて設定タブ。
ここに「タスクを停止するまでの時間」という設定項目がある。
色々ググったところ、この設定タブの「タスクを停止するまでの時間」と、トリガータブの「停止するまでの時間」の関係性はややこしいようである。
参考:
pig-log.com
techblog.gmo-ap.jp
このほか、「タスクを停止するまでの時間」はデフォルトで3日間となっているようなので、ここの設定を修正し損ねていたら3日で止まってしまった、という事例もある模様。今回私がやりたかったケースでは、1日のうちの特定の時間帯だけ動けばいいのだが、何にしても想定していない時間帯に動いたり止まったりされたら困るので……


よくわかんないから、両方とも同じ時間で設定しよう。

無難だからね、しょうがないね。
というわけで、「タスクを停止するまでの時間」を「8時間」にしておきました。これなら、トリガータブの効果で止まるとしても、設定タブの効果で止まるとしても、同じ時間だから問題なし。


そしてできたのが、このような設定。

この設定でしばらく放置し、タスクスケジューラ君の仕事ぶりを後でチェックすることにしました。




後日。
このタスクスケジューラが実行しているプログラムは、クッソ簡単に言うと「特定のコマンドを実行し、その結果を所定の場所にログファイルとして出力する」もので、LOOP処理は使わず、前述のとおりタスクスケジューラの機能で繰り返し実行させています。
なので、所定の場所に5分間隔のタイムスタンプのファイルが存在していればOK。
……だったのですが、ログファイルは確かに存在していたのですが、タスクスケジューラが動かないはずの19時台や0時台のタイムスタンプのファイルがある……
何でだろう?と思ってちょいと調べたら、原因がわかりました。実に簡単なことでした。



トリガータブで「継続時間」を「無期限」にしたのが悪かったようです。うんまぁ、確かにあんまり深く考えて設定はしなかったが…
参考:
jpwinsup.github.io

この継続時間には「無期限」(半永久的に繰り返しを行う)を指定することが可能ですが、この継続時間「無期限」は、トリガー設定の 毎日 / 毎週 / 毎月 の動作に影響し、いくつかご所望の動作とは異なる振る舞いにつながる可能性があります。

上記サイトの例としては書かれていないけど、設定タブの「タスクを停止するまでの時間」と、トリガータブの「停止するまでの時間」をガン無視して常時5分に1回動き続けているところを見るに、これが原因である可能性が高い。
もしかしたら、
継続時間>設定タブの「タスクを停止するまでの時間」=(?)トリガータブの「停止するまでの時間」
なのかもしれない。
こちらのご希望としては、とにかく10時~18時の8時間は動いていてほしいので、ここも8時間にしてみる。

修正すると、タスクスケジューラ上ではこのような表示になりました。

あっ、「トリガーされた後、5分ごと無期限に繰り返す」ってな表示になっていたのが、「トリガーされた後、8時間の間5分間ごとに繰り返す」に変わっている!


結果は見えている気がするが……8時間ではちょっと間隔が長いので……ちょっと間隔を縮めて、どの設定が優先されるか確認。
・トリガータブの「停止するまでの時間」=10分、「継続時間」=30分
 →30分でタスクスケジューラは停止
・設定タブの「タスクを停止するまでの時間」を1時間*1、「継続時間」=2時間
 →2時間でタスクスケジューラは停止
というわけで「継続時間」が設定できる状態だと、「継続時間」の設定が最優先で適用されてタスクが動作する、という結果になりましたので、「継続時間」を設定する場合は気をつけようというお話でした。
だからWindowsきらい(理不尽)

*1:設定タブの「タスクを停止するまでの時間」は分単位では設定できなかった