treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

タスクスケジューラのタスクが「スタートアップ時」に実行されない

恐らくバグの一種だと思いますが、タスクスケジューラに設定したタスクが「スタートアップ時:システム起動時」をトリガーにした場合、そのタスクの実行に失敗する動作があったのでご報告です。

VHDマウントのタスクをテストしていて気づいたこと

以前に<VHDファイルで単一ドライブ環境に2ndドライブを用意する - treedown’s Report>でVHDファイルをOS起動時に自動マウントしてドライブとして使う方法を別のOSで実施していた際に、正常にスタートアップ時のタスクが実行されないケースがあったので、該当する環境で同じ現象に遭遇した時のために記録を残しておくことにしました。

なお、今回はVHDファイルを「スタートアップ時:システム起動時」のタイミングでマウントするタスクをベースにしていますが、何を実行するかに関わらず、"ある環境のタスクスケジューラで一定の条件を満たした複数のタスクが存在する"という条件で今回のタスクが実行されない現象は発生するようです。(他のタスクでは未検証)

対象の環境ではOSにWindows Server 2016を使い、VHDを複数台マウントするタスクを

このようにセットアップしていました。

VHDマウント動作が変

以前の<VHDファイルで単一ドライブ環境に2ndドライブを用意する - treedown’s Report>で確認したように、VHD×3ファイル分のタスクを作成して、起動時にVHDがマウントされることを確認します。

正常にタスクが実行された時には、

このようにVHDファイルで用意したドライブ(S:/T:/U:)がOS起動時にマウントされ、サインイン後には使用可能な状態で起動しています。

しかし、タスクの構成次第では、

このように部分的に(図では1台分のVHD)しかマウントされなかったり、他にも

このようにまったくVHDファイルがマウントされないケースがありました。

ディスクの管理(diskmgmt.msc)画面で確認してみると、

正常な時はVHDファイルがディスクとしてマウントされていましたが、タスクの不備でマウントされないVHDファイルが存在した場合にはディスクの管理画面でもディスクは表示されません。

どうもタスクが実行されていないようです。

また、別の再起動のタイミングでは、

このようにスタートアップ時に指定したタスクが実行中のままでサインイン後にもしばらく待ち時間が発生していて、しばらくすると、

このようにタスクが実行完了となる、動きをしていたときもありました。

調べた結果、発見した内容

Microsoft Japan Windows Technology Support Blogにそれらしい情報がありました。

スタートアップ時タスクの実行に失敗する問題について
https://jpwinsup.github.io/blog/2024/04/03/UserInterfaceAndApps/Taskscheduler/startup-task-failed/

※Microsoft Learnにも同じ内容が掲載されています。
スタートアップ時タスクの実行に失敗する問題について
https://learn.microsoft.com/ja-jp/archive/blogs/askcorejp/task-failed-to-run-when-startup-trigger-are-set

覚えておいた方がいいかもしれない情報なので、概要を簡単にまとめてみます。

  • 対象環境はWindows Server 2016の他、Windows Server 2012 R2やWindows10 1803以前のバージョンとWindows 8.1というクライアントOSも含まれる(ただし2016以外は現時点でサポート終了OS)
  • 対象環境のOSが最新の更新プログラムを適用済の場合に発生する可能性がある(詳細なKBは前述のMicrosoftサイトURLを参照)
  • 対象環境で通常のユーザアカウントを使って、パスワードを保存しないオプションを有効化しないタスクが、トリガに「スタートアップ時:システム起動時」を設定している。
  • 前述のように構成されたタスクが複数存在し同時実行されるようになっている。

この場合にはタスクスケジューラの「スタートアップ時:システム起動時」タイミングのタスクは実行に失敗するケースがある、というのに該当して、今回のタスク実行で失敗するパターンがあったようだ、という結論に至りました。

タスクを確認してみる:構成

全部が失敗したわけではないので(いろいろ試しすぎたこともあって)明確な失敗するパターンは不明なのですが、注意点として見ておきたいところを(個人的に)記述しておきます。

今回タスクの実行に失敗したときに、複数(三つの)タスクを設定した際の「構成」欄が全て揃っていなかったというのはあります。
以前の<VHDファイルで単一ドライブ環境に2ndドライブを用意する - treedown’s Report>では、「構成:Windows10」としていたのですが、今回のタスクの一部は

上図のように「Windows Server 2016」としていたのですが、デフォルトの「Windows Vista, Windows  Server 2008」となっている(設定抜け)タスクがあった時に失敗があったような感じがします。

今回の設定で言えば「Windows Server 2016」に揃えておくのが正解と言えそうです。

タスク個別に遅延時間を設定する:トリガの編集

現象を解説した前述のMicrosoftサイトURLに記載がある解決方法の中で一番どの環境でも適用できて、問題を回避するのに有用な設定と思えるのがこの方法です。

複数のタスクで「スタートアップ時:システム起動時」トリガを使うようであれば、遅延時間を指定してタスクが同時に実行されないようにする、という回避策が使えそうです。

設定方法は、各タスクの「トリガ」タブで指定している「スタートアップ時」の欄を編集ボタンで編集し、「トリガの編集」画面を表示させます。

この「トリガの編集」画面に、詳細設定欄を見ると、「遅延時間を指定する」の項目があり、遅延時間デフォルト15分間が表示されます。ここを好きなように設定することができます。ドロップダウンリスト内の数字だけでなく、数字を直接入力して好きな値を追加可能です。

現象を解説した前述のMicrosoftサイトURLに記載がありますが、遅延時間が1秒でもタスクが同時実行ではなくなることで、発生タイミングがずれてタスク失敗の発生頻度が下がる=効果があるという記述が見て取れます。

あと、複数のタスクが現象の発生条件になっているため、バッチファイルやpsスクリプトなどで複数のタスクを単一のタスクにまとめてしまう、という手法でもこの現象は回避可能なようです。

絶対発生する再現性はないけど…

今回やってみた感触では、本現象が絶対発生する、といえるほどの再現性はなかったので問題を絞り込みづらかったのですが、前述のMicrosoftサイトURLの記載を確認してタスクを再構成することで動作が安定したというのはあるので、もしタスクスケジューラ内の複数のタスクで「スタートアップ時:システム起動時」トリガを使っている環境が旧Windows環境にあるなら、この件が該当している可能性も考えてみて良いかもしれません。