質問者
タスクスケジューラの有効期限について

質問
-
タスクスケジューラにて、DosのBatファイルを実行しています。
有効期限の最終日だけ実行されていない事象が発生しました。
◆設定内容は、以下です。
---------------------------------------------------
OS:Windows Server 2016 Standard 64Bit
設定:
<セキュリティオプション>
アカウント:Administrator
起動条件:ユーザがログオンしているかどうかにかかわらず実行する
特権 :最上位の特権で実行する
トリガー:1)毎日、開始:2020/01/05 1:00:00
間隔:1日
有効期限:2021/01/01 1:00:00
2)毎日、開始:2021/01/05 1:00:00
間隔:1日
有効期限:2022/01/01 1:00:00
3)毎日、開始:2022/01/05 1:00:00
間隔:1日
有効期限:2023/01/01 1:00:00
---------------------------------------------------
◆発生事象
上記設定で、トリガー①の最終日の2021/01/01 1:00:00
にバッチが実行されなかった。
※バッチ起動時にログを出力しているが、ログが出力
されていない。
※イベントログにタスク機能のログが出力されていない。
---------------------------------------------------
◆その他、調査・補足事項
・②の「2021/01/05 1:00:00」以降は毎日起動されている。
・上記設定は、2020/1/1以前はWindows2012Serverで
同様の設定で実行されており、各トリガーの有効期限の
1/1 1:00:00にも起動していた
・上記のタスクスケジューラ設定をエクスポートし
検証用の別サーバにインポートして動作確認を行ったところ
「2021/01/01 1:00:00」もバッチは実行された
・Windwos 2012 Serverのタスクスケジュールの設定と
問題が発生したWindwos 2016 Serverのタスクスケジュール設定
を比較するとタスクの開始・有効期限の年が違うだけとなる。
・課題が確認されたのが2021/1/8であった為、その時点で
タスクスケジューラを確認すると、
「次回の実行時刻」は「2021/01/09 1:00:00」であったが、
「前回の実行時刻」は「2021/01/08 1:00:01」となっていた
---------------------------------------------------
◆質問事項
①Windwos 2012 ServerとWindwos 2016 Serverでタスクスケジューラ
の制御に関して、仕様が変更になっているか?
特に有効期限について
②開始時刻が「1:00:00」となっていて前回実行時刻が「1:00:01」
となっている場合、1秒のずれは何が原因で発生するのか?
※なぜ、開始時刻に実行されないのか?
③開始時刻が「1:00:00」となっていて前回実行時刻が「1:00:01」
となっている場合、有効期限の「2021/01/01 1:00:00」に
タスクは実行されるのか?
④1/19追記
上記設定では、「2021/01/01 1:00:00」には、有効期限の
最終として実行される認識だが、設定としては誤りはないか?
※テスト環境では実行されている
※ログオフはされていない、「2021/1/5 01:00:00」以降は
正常にタスク実行されている
上記設定で「2021/01/01 1:00:00」のみタスクが実行されない
要因は何が考えられるか?
以上、長文になりましたが、よろしくお願いいたします。
- 編集済み T.Shiba 2021年1月19日 10:29
すべての返信
-
はじめまして。
私の環境でもタスクスケジューラで起動しているジョブがありますため、そちらの内容を踏まえて回答します。
(まずは①②のみ回答、③は都合により別途とさせてください)
>①Windwos 2012 ServerとWindwos 2016 Serverでタスクスケジューラの制御に関して、仕様が変更になっているか? 特に有効期限について
当方、マイクロソフト社員ではないためWeb情報のみでの調査になりますが、ざっと確認した限りタスクスケジューラの構成が変更されたといった情報は見当たりませんでした。
>②開始時刻が「1:00:00」となっていて前回実行時刻が「1:00:01」となっている場合、1秒のずれは何が原因で発生するのか? ※なぜ、開始時刻に実行されないのか?
私の環境においてもタスクスケジューラで1時間毎に起動するジョブを作成しており、その内容を確認したところ「前回の実行時刻」がX:00:01 となっていました。こちらの内容を踏まえるとT.Shibaさまの環境固有の事象ではなく、タスクスケジューラの制約によりこのように記録されるものと考えられます。
- 編集済み Zaamasu 2021年1月19日 0:16
-
回答ありがとうございます。
①について、
タスクスケジューラの構成に変更が見当たらない旨、ありがとうございます。
不具合情報についても範囲を広げて確認してみます。何か情報をお持ちでしたら共有お願いします。
②について
前回実行時刻「1:00:01」となっていることは、問題ではないのですが
本番のログなどを解析した中で、前回実行時刻「1:00:01」で次回実行時刻は「1:00:00」となっており
その点が検証環境では再現できていない状態です。
※タスクの12/31~01/01の状態は、タスクスケジューラの実行履歴が残っていないため
確認できていませんが、1/8以降の何日か確認したところ上記状態でした。
問題は「2021/01/01 1:00:00」にタスクが実行されなかったことですので
上記状態の再現・理由は目的ではないですが、検証するうえでの1つのポイントと考えています。
前回実行「1:00:01」になっていることが有効期限に影響するのかどうかを検証したいと
考えています。
-
T.Shibaさま
本件、私の環境で確認した結果を踏まえ、②③④(②は追加の連絡)について回答します。
>②開始時刻が「1:00:00」となっていて前回実行時刻が「1:00:01」となっている場合、1秒のずれは何が原因で発生するのか? ※なぜ、開始時刻に実行されないのか?
原因は不明ですが、タスクを長く動かし続けると本事象(時刻乖離)が発生するようです。
私の環境でタスクを昨日新規作成したところ、開始時刻が「2:00:00」/前回実行時刻が「1:00:00」のように00秒表示になりました。一方、半年以上稼働中の既存のタスクを確認したところ、開始時刻が「2:00:00」/前回実行時刻が「1:00:01」のものや、開始時刻が「2:00:00」/前回実行時刻が「1:00:02」といったものもありました。
なお、時刻乖離が発生しているタスクに対し、何らかの設定を更新した後、同タスクが開始時刻に実行されると前回実行時刻が00秒表示に戻りました。こちらは対処方法の一案としてご紹介します。
>③開始時刻が「1:00:00」となっていて前回実行時刻が「1:00:01」となっている場合、有効期限の「2021/01/01 1:00:00」にタスクは実行されるのか?
私の環境で確認したところ実行されました。なお、以下確認方法で実際のタスクの実行時刻を確認したところ、前回実行時刻が「1:00:01」となっているタスクのスクリプト開始時刻は、数秒(最大10秒程)遅れていました。
<確認方法>
スクリプト(PowerShell)のなかに "Get-Date" コマンドレットを追記して、実行時間を確認
>④1/19追記 上記設定では、「2021/01/01 1:00:00」には、有効期限の 最終として実行される認識だが、設定としては誤りはないか?
有効期限の設定は正しいと考えられます。上記③のとおり私の環境でもタスクは実行されました。
本件、「トリガー①の最終日の2021/01/01 1:00:00にバッチが実行されなかった」とのことですが、T.Shibaさんや当方の確認を踏まえるとタスクスケジューラの不具合ではなく、当該時刻にOSが起動していなかった、Task Schedulerサービスが起動していなかった、といったことが原因として考えられます。まずはこれらの視点でイベントログ等を確認いただくのがよいかと考えられます。
上記回答が参考になれば幸いです。
- 編集済み Zaamasu 2021年1月20日 2:48
-
Zaamasu 様
回答ありがとうございます。
その後、こちらでも別の環境を構築し確認を行っておりました。
②については、負荷ツールにてOS負荷が高い状態にすると
事象としては発生したしました。
再現とはなっていませんが、単純にタスク起動時のOSの状態
により、数秒程度の遅延は発生するものだと判断しました。
③について、こちらの検証でも同様の結果となっております。
④について、こちらの検証でも同様の結果となっております。
本番のイベントログは、確認しております。
・アプリケーションログ
最古が1/6であった為、不明
・システムログ
「1/1 1:00:00」前後の他のイベントは出力されているが、
該当アプリの「1:00:00」のログはなし
「1:00:00」前は、0:57:58に他サービスログが出力
「1:00:00」前は、1:02:58に他サービスログが出力
・セキュリティログ
システムログと同様の状態
・タスクスケジューラ Maintenanceログ
「1:00:00」前後は出力なし
・タスクスケジューラ Operationalログ
0件
以上からOSは起動しており、正常に稼働していたと想定してます。
単純に「1/1 1:00:00」のタスクが実行されなかった
ように感じています。
-
T.Shibaさま
ご連絡ありがとうございます。
>タスクスケジューラ Operationalログ
>0件
上記ログが0件とのことですが、通常タスクが実行された場合、イベントID:102、ソース:TaskSchedulerの情報が当該ログに記録されます。当該ログが有効で、上述の通りOSやサービスが停止していない場合、タスクの実行条件(以下例)が合致しなかったためにタスクが実行されなかった可能性があります。
例:タスクの[全般]タブで、「ユーザがログオンしているときのみ実行する」が選択されている
当該設定も問題なければ当該サーバ固有の事象となりますので、この場合はタスクの実行結果とログにて正常完了したことを日々確認し、事象が再現する場合(タスクが実行されない)は再現時/非再現時のサーバ状態を比較して原因を探す、といった流れになるかと思います。
(もしくは正月の停止期間を設けず、常にタスクを実行し続ける状態として、正月中の情報も取得する)。
上記が参考になれば幸いです。- 編集済み Zaamasu 2021年1月22日 6:00