タスクが常に実行されていることを確認するにはどうすればよいですか?
私はspeedfanを使用してファンを制御していますが、クラッシュしたり、再起動する必要がある場合があります。正しく機能していないために手動でspeedfanを終了すると、自動的に再開されません。
タスクスケジューラを使用して、実行されていない場合でも常に実行されるようにするにはどうすればよいですか?
現在、ログオンするたびに実行するように設定されており、タスクが失敗しても再起動しない場合は再起動するように設定されています。
ありがとう
以下のようなバッチスクリプトを使用し、 Tasklist および FindStr を使用して、SpeedFanのEXE名がメモリ内で実行されているかどうかを確認できます。以下のロジックで Start EXEがメモリで実行されていない場合に実行されます。
SpeedFan.exe
の値は、アプリの起動時に実行されるEXEファイルの実際の名前に置き換えてください。SET EXEName=SpeedFan.exe
で何かが異なる場合は、正しく機能します。
EXEへの完全な明示的パスが、実際のパスの以下のロジックにも含まれていることを確認する必要があるため、(SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe
内の)それをアプリEXEの実際のパスに置き換えます。 =
記号の後は、それを変更する場所です。
これをタスクスケジューラで1分30秒ごとに実行するようにスケジュールしました。ただし、このプロセスで実行されているかどうかを確認し、実行されていない場合は開始することがよくあります。
@ECHO OFF
SET EXEName=SpeedFan.exe
SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe
TASKLIST | FINDSTR /I "%EXEName%"
IF ERRORLEVEL 1 GOTO :StartSpeedFan
GOTO :EOF
:StartSpeedFan
START "" "%EXEFullPath%"
GOTO :EOF
はい。ただし、すべてのプログラムがこれを行うわけではないため、これらのタイプのイベントを監視するには、まずSysmonをインストールする必要があります。私の知る限りでは。
これにより、ProcessTerminate
イベントで収集したアプリを再起動し、必要に応じていつでも再起動できます。バッチスクリプトを使用する場合のように、30秒に制限されることはありません。
DOS
またはPowerShell
の_Sysmon.exe -i
_を使用してインストールします。これが完全に行うことは ここにあります です。
TL; DR
システムモニター(Sysmon)は、Windowsシステムサービスおよびデバイスドライバーであり、システムにインストールされると、システムの再起動後も常駐し、システムアクティビティを監視してWindowsイベントログに記録します。
これでインストールされました_Event Viewer
_にあります。
Vista以降イベントは_Applications and Services Logs/Microsoft/Windows/Sysmon/Operational
_に保存されます
古いシステムの場合イベントは_System event log
_に書き込まれます。
この例では、 stickiesおよびWindows 10 Proを使用します。
N.B。タスクスケジューラでコードを使用する前に、まず_Event Viewer
_でテストすることをお勧めします。
Event Viewer
_を開くEvent Viewer (Local)
を右クリックしますCreate Custom View...
_XML tab
_をクリックしますEdit query manually
_これは stickies プログラムの例です。ニーズに合わせてC:\Program Files (x86)\Stickies\stickies.exe
を変更するだけです。各セクションがSysmon
に対して行うことを、できる限り以下で説明します。
_<QueryList>
<Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
<Select Path="Microsoft-Windows-Sysmon/Operational">
*[EventData[Data[@Name='Image'] = 'C:\Program Files (x86)\Stickies\stickies.exe']]
and
*[System[(EventID=5)]]
</Select>
</Query>
</QueryList>
_
(1)_[EventData[Data[@Name='Image'] = 'validFullPath.exe']]
_はパスのクエリです。これは、プログラムファイル_.exe
_の場所を検索します。 _*
_などのワイルドカードを使用する方法がないため、これは完全パスである必要があります。
(2)and
はおよびステートメントも一致します...
(3)*[System[(EventID=5)
はProcessTerminate
のイベントIDです。
(4)正しく実行された場合、その特定のプログラムが最後に終了したときのプロセスがメインGUIに表示されます。アプリを開いて閉じない場合は、イベントビューアUIの最上部に_Number of events:... New event available
_が表示され、F5キーを押して更新すると、上部に新しいイベントエントリが表示され、問題なく動作するはずです。
The Event Log query specified is invalid
_が表示されます。これでクエリが並べ替えられました。タスクスケジューラを設定するだけです。添付画像の以下の手順を参照してください。
図のステップ4に関する最後の注意:
2 seconds
_です。Repeat task...
_をTSで許可されている最小値に設定してから、期間を2秒少し長くします。 (アプリごとにこれをテスト)。Stop all running...
_チェックボックスを使用しないでください。使用すると、厄介な停止/開始ループが発生します。これを理解するのに少し時間がかかりましたが、私がやったことをとてもうれしく思います!、これがお役に立てば幸いです