本記事は、マイクロソフト社員によって公開されております。
こんにちは、Windows サポートチームの長尾です。
今回は、Windows 10 バージョン 1607 以降、及び、Windows Server 2016 以降で発生する、タスク スケジューラのタスクが開始されない問題についてご紹介します。
■ 事象
OS 起動後、一定期間経過すると、以下のようなタスクが開始されないという問題が報告されています。
- ログオン時に遅延して開始するタスク
以下のように、「タスクの開始」が「ログオン時」、かつ、「遅延時間を指定する」にチェックがついているタスクが該当します。
- 繰り返し実行されるタスク
以下のように、「毎日」、「毎週」、「毎月」のいずれかが選択されており、「繰り返し間隔」にチェックがついているタスクが該当します。開始時刻 (以下の場合は、2021/03/02 0:00:00) に一度だけ実行されますが、その後の繰り返し実行 (以下の場合は 1 時間おき) が実行されません。
■ 原因
ログオン時に遅延して開始するタスクを作成する際にメモリ上に確保されたデータ (オブジェクト) が、そのタスクが完了した後も解放されずに残り続け、そのオブジェクトの個数が、OS 内部で定義されている上限値を越えると、それ以降、ログオン時に遅延して開始するタスクが開始されない状態となります。
また、繰り返し実行されるタスクについても、内部的に同様の仕組みを利用しているため、上記の上限値を越えると、それ以降、タスクの繰り返し実行を行うことができない状態となります。
(補足)
事象の要因となるタスクと、事象の影響を受けるタスクが、以下のように異なっていることにご注意ください。
事象の要因となるタスク :
ログオン時に遅延して開始するタスク事象の影響を受けるタスク :
ログオン時に遅延して開始するタスク
繰り返し実行されるタスク (トリガー「毎日」「毎週」「毎月」)
また、OS 標準のコマンドやツールによって、メモリ上に確保されているオブジェクトの個数を確認したり、上限値を増やすことはできません。
■ 発生条件
弊社で確認できている範囲では、以下 2
点の発生条件があります。
これらの条件を満たす環境で、長期間 OS を再起動していない場合に、事象が発生します。
OS バージョン
Windows 10 version 1607 以降の OS バージョンで発生します。
サーバー製品では Windows Server 2016 以降が該当します。ログオン時に遅延して開始するタスクが存在する環境
ログオン時に遅延して開始するタスクは、管理者権限で起動した PowerShell で、以下のコマンドを実行することで確認できます。コマンド :
Get-ScheduledTask |? {$_.Settings.Enabled -And ($_.Triggers |? {$_.Enabled -And $_.Delay -And $_.ToString() -eq “MSFT_TaskLogonTrigger”})} |% {$_.TaskPath+$_.TaskName}出力結果の例 :
\Microsoft\Windows\AppID\SmartScreenSpecific
\Microsoft\Windows\LanguageComponentsInstaller\Installation
\Microsoft\Windows\WindowsUpdate\Automatic App Update
また、本事象は、以下のような環境で、発生しやすい傾向があります。
ログオン時に遅延して開始するタスクの数が多い
この問題は、ログオン時に遅延して開始するタスクが内部的に作成したデータ構造が、タスクが完了した後も残存することで発生するため、ログオン時に遅延して開始するタスクの数が多い環境ほど、事象が早期に発生しやすくなります。ログオン ユーザー数が多い
1 日あたりの、ユーザーのログオン回数が多い環境ほど、事象が早期に発生しやすくなります。
■ 弊社での対応状況
本問題は、米国の弊社製品開発部門において、問題が発現した場合の影響度、修正を行った場合の影響度、修正の難易度など、様々な要素を含めて検討された結果、残念ながら、現時点では、修正が見送られている状況です。
弊社開発部門においては、将来的にリリースを予定している、開発中の Windows OS において本問題の修正を行うべく、対応を検討しています。
当面の間、ご不便をおかけいたしますが、現在 本問題にてお困りの環境におきましては、以下の回避策にて、ご対応を続けていただけますよう、お願いいたします。
■ 回避方法
本問題は、内部的なオブジェクトの蓄積により発現する問題であるため、定期的な Windows OS の再起動を実施いただくことで問題の発生を回避いただくことが可能です。
最後に再起動を実施いただいてから、タスク スケジューラのタスクが開始されない事象が発生し始めた時期までの期間よりも前に、再起動を行うことをご検討ください。
なお、本問題は、ユーザーのログオン数や、ログオン時に遅延して開始するタスクの個数により、再現までの日数が変化しますので、状況や設定に変化があった場合には、発生までの日数が大きく変わる可能性がある点にご注意ください。
本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。
次の記事メンバー NIC が故障すると、チーミングのプロパティが表示されなくなる
前の記事個人用 ホストプールでユーザーの UPN Prefix が変更された場合の動作とサポートに関して
2022 10/18 こんにちは、Windowsインフラエンジニア ばにゃです。 タスクスケジューラに設定されたタスクはトリガー設定を行うことで定期的に実行することが可能です。 このトリガー設定画面では、1回、毎日、毎週、毎月、という選択肢はありますが、例えばそれ以外の
30分、1時間、10時間といった任意の間隔が指定できないように見えます。タスクスケジューラのタスクを指定した間隔で定期的に実行する方法
そこで本記事では、タスクスケジューラのタスクを指定した間隔で定期的に実行する方法について解説します。
この方法であれば、1時間ごとに定期的にタスクを実行するといったありがちなタスク実行から、100時間ごとに定期的にタスクを実行する、25日ごとに定期的にタスクを実行する、といった誰にも需要がなさそうなタスクの実行まで、さまざまな定期実行の設定が可能となります。
目次
前提となる環境
本記事では、以下のような環境を例として記載します。この環境で私自身が実機動作確認済みの手順となります。
環境
- Windows Server 2019
- Windows Server 2016
- Windows 10
タスクを指定した時間毎に実行する方法
1時間ごとに定期的に実行する方法
Windows + Rキー より「ファイル名を指定して実行」を起動し、以下のように入力してタスクスケジューラを起動します。
実行間隔を変更したいタスクを右クリックしてプロパティを開きます。
トリガータブを選択し「新規」をクリックします。
トリガー設定画面で以下のように設定し「OK」をクリックします。
- 設定:1回
- 繰り返し間隔:1時間
- 継続時間:無期限
トリガータブの画面に戻るので「OK」をクリックします。
設定変更したタスクのトリガーに「トリガーされた後、1時間ごとに無期限に繰り返します。」と表示されていれば問題ありません。
以上で設定は完了です。
繰り返し間隔の選択肢以外の間隔を指定する方法
トリガー設定画面の繰り返し間隔の設定では、選択肢に以下の4種類しか表示されていないため、これら以外の間隔を指定できないように見えます。
- 5分
- 10分
- 15分
- 30分
- 1時間
しかしこの値は直接書き換えることが可能で 1分~31日間 の間隔を指定することが可能です。
この範囲を超える値を指定すると以下のようなメッセージが表示されて、設定自体できません。
間隔の指定は、数字部分は 整数のみ 指定可能、単位は 秒、分、時、日 で指定可能です。
もし90分間隔で実行したい場合、直接入力で 5400秒間、90分間 といった指定は可能ですが、1.5時間と入力することはできません。
許可されていない値を入力した場合は以下のメッセージが表示されて、設定自体できません。
参考情報
関連記事
Microsoft ドキュメント
Interval (repetitionType) 要素 に関してはMicrosoft の以下サイトも参考にしてください。
- タスクスケジューラから起動されるプロセスの優先度/ディスクIOの優先度を変更する方法
- タスクスケジューラの定期実行タスクが次回の実行時刻に実行されない場合の対処方法
この記事を書いた人
国内大手SIer勤務、SE10年以上やっています。これまでの経験を元にIT技術情報やIT資格試験、たまに投資/資産形成やSE界隈の話について記事にしていきます。