web-dev-qa-db-ja.com

Windowsタスクスケジューラが複数のインスタンスを起動しようとするのはなぜですか?

クラスター内にある1つのServer 2008 Webサーバー(R2ではない)で実行されるWindowsスケジュールタスクがいくつかあります。

私たちは最近、元のWebサーバークラスターから新しいWebサーバーCluser(Server 2008-R2ではない)に移動しました。

Windowsタスクを実行する(クラスター内の)新しいWebサーバーは、私たちが信じている元のサーバーと同じように設定されています。

しかし、新しいWindowsサーバーでは、Windowsタスクスケジューラが各タスクを3回即座に開始したいと思っているようです。

新しいタスクをキューに入れるオプションを設定すると、次のようになります。

イベントID 324タスクスケジューラは、タスク "\ Client Reporting"のインスタンス "{9a1a8411-b042-45ff-8e6b-89874df230d7}"をキューに入れ、インスタンス "{2bcc3df6-ea3b-4453-90c2-75b8b1946388}"が完了するとすぐに起動します。

既存のタスクを停止するオプションを設定すると、次のようになります。

イベントID 323タスクスケジューラは、新しいインスタンス「{4db66265-1f51-4ede-8535-ac7c3cb5c4c1}」を起動するために、タスク「\ Client Reporting」のインスタンス「{e685a910-b32b-414e-85fd-96bbe54314a2}」を停止しました。

チェックされた設定:

  • タスクをオンデマンドで実行できるようにします。

  • スケジュールされた開始を逃した後、できるだけ早くタスクを実行します。

  • 1時間以上実行している場合は、タスクを停止します。

  • 要求されたときに実行中のタスクが終了しない場合は、強制的に停止します。

  • コンピューターがAC電源で動作している場合にのみ、タスクを開始します。

  • コンピューターがバッテリー電源に切り替わった場合は、タスクを停止します。

選択したオプション:タスクが既に実行中の場合-既存のインスタンスを停止します。

注:タスクをクラスター内のあるサーバーから別のサーバーに移動して、選択した特定のサーバー上のタスクスケジューラが問題の原因であるかどうかを確認しました。同じ行動。

新しいサーバーの構築に関係があるのでしょうか?

非常によく似たタスクが別のサーバークラスターにセットアップされており、この複数回の起動を行わなくても問題なく動作します。これらのタスクをここでのタスクと比較すると、タスクスケジューラ内のオプションを通じて利用できる設定に関して、明らかに異なるものは何もないようです。

トリガー:タスクは毎日1時間に1回トリガーされ、この時間を超えると停止するようにスケジュールされます。

アクション:.batファイルを実行します。

これを引き起こしている可能性のあるもの/タスクがこの方法で複数回開始する原因となっているロジックを確認できる場所はどこですか?

8
Paul H

これは KB2617046 で説明されている問題です。スケジュールされたタスクを無効にしてから有効にすると、重複したトリガーが作成されます。タスクのプロパティにはまだ1つのトリガーしか表示されていませんが、タスク履歴でタスクが同時に複数回トリガーされていることがわかります。

マイクロソフトから入手可能な修正プログラムがあります。ホットフィックスはVista用であると述べていますが、Server 2008 SP2で動作します。修正プログラムを適用した後、重複を取り除くために、タスクのトリガーを無効にしてから再度有効にする(変更を適用するためにトリガーのプロパティウィンドウを閉じる)必要があります。

2
Collin K

「タスクが失敗した場合は再起動する:」オプションをデフォルトで「1分」と「最大3回再起動する」のオプションを選択することで、Windowsタスクスケジューラが複数のプロセスを起動するのを防ぎました。

これは直感に反するように見えました

  1. タスクが失敗しているように見えなかった(タスクが実行するアクションが複数回実行された)

2.いずれにしても、タスクはすでに3回開始することを決定しているようです。

また、テストWebサーバーでこれらと同じタスクを設定しているため、このオプションをオンにする必要はありません。

1
Paul H

何らかの理由で回答にコメントを追加することはできませんが、タスクが0以外の終了コードを返すため、「失敗」している可能性があります。実際のタスクプロセスの代わりに実行するようにスクリプトをスケジュールすることで、これを修正できます。スクリプトで実際のタスクプロセスを実行し、スクリプトが完了したら、プロセスの終了コードを既知の成功コードのリストと照合します。成功した場合は、スクリプトをコード0で終了させ、成功しなかった場合は、失敗の終了コードを渡します。これにより、実際に失敗した場合にタスクスケジューラがタスクを再実行する機能を保持できます。

残念ながら、正常に実行されたプロセスが0以外の終了コードを返すことは珍しいことではありません。さまざまな終了コードについて、ドキュメントを確認する(または開発者に問い合わせる)必要があります。

0
Matt

数か月前にWinServer2008 R2でこの問題に直面しました。私は多くの解決策を試しましたが、何も問題を解決しませんでした。

次は問題を解決するようです:タスクスケジューラアプリケーション:タスクを選択します:次に右メニューから[終了]をクリックすると、「このタスクのすべてのインスタンスを終了しますか?」 「はい」をクリックします。

これで問題が解決することを願っています。

0
Ahmad.Net