前置き
Windowsのタスクスケジューラのタスクが、手動で実行すると起動するのに、自動だと起動しないという不具合に悩まされて直った話。
ネット上で報告されているのは、カレントディレクトリが指定されていないと自動起動しないという謎現象。
この方は、カレントディレクトリを、「開始(オプション)(T)」に指定するとなおったらしい。
【タスクスケジューラ】手動では起動するのに、設定したタスクだと起動しないタスクを起動できるようにする方法 - pyonsupyonsu’s blog
https://pyonsupyonsu.hatenablog.com/entry/2019/02/02/201139
遭遇した現象と解決方法
こちらの環境は、「メインのWindows」と「時刻同期用のLinuxのNTPサーバ」があり、共にバックアップ電池が内蔵されておらず、時計が保持できません。
この子たちは起動時、Windowsの時計は2018年、NTPサーバ側の時計は2016年になります。
WindowsからNTPサーバにアクセスする周期は1分程度(2^6=64秒)にしています。
Windowsには自動ログオン設定がしてあり、起動したいタスクの起動トリガは「ログオン時」「遅延1分」です。
これで、何故か起動しない。
結果的に、以下のような挙動しているようです。
- Windowsは起動時、2018年になっている
- Windowsがログオン直後にNTPクライアントが動いて2016年にセットされる
- 時間巻き戻りにより、内部的に1分間が経過せず、起動しない
なので、date コマンドで日付を2020年にしてやると、即座に起動します。
まとめ
- タスクスケジューラの「ログオンから1分後」というのは、どうやら単調増加時間ではなく、絶対時刻!