12

「WindowsでMonitを実行できますか?」という質問を見たことがありますが、VMを使用したい場合を除いて、答えは「いいえ」のようです。

それで...実際にWindowsOS用の小さなフットプリントのmonitのようなアプリケーションはありますか?私が探しているのは、監視(数百のアプリがあります)だけでなく、スクリプトを実行したり、サービスを再起動したりする機能でもあります。たとえば、Webページを監視し、そのページが応答しなくなった場合はTomcatを再起動します(サービスはまだ実行されているが正しく応答していないため、サービスを監視することはできません)。

これは大規模なアプリケーションではなく、小規模なアプリケーション向けであるため、重量のある高価なソリューションは望ましくありません。

4

4 に答える 4

7

自分のニーズに合ったものが見つからなかったので、Powershell スクリプトを少し学び、他の人にも役立つはずのソリューションを展開しました。Windows プラットフォームを想定すると (それ以外の場合は monit を使用してください)、Powershell は非常に強力で簡単です。

サンプル-monitor.ps1 スクリプト:

$webClient = new-object System.Net.WebClient

###################################################
# BEGIN USER-EDITABLE VARIABLES

# the URL to ping
$HeartbeatUrl = "http://someplace.com/somepage/"

# the response string to look for that indicates things are working ok
$SuccessResponseString = "Some Text"

# the name of the windows service to restart (the service name, not the display name)
$ServiceName = "Tomcat6"

# the log file used for monitoring output
$LogFile = "c:\temp\heartbeat.log"

# used to indicate that the service has failed since the last time we checked.
$FailureLogFile = "c:\temp\failure.log"

# END USER-EDITABLE VARIABLES
###################################################

# create the log file if it doesn't already exist.
if (!(Test-Path $LogFile)) {
    New-Item $LogFile -type file
}

$startTime = get-date
$output = $webClient.DownloadString($HeartbeatUrl)
$endTime = get-date

if ($output -like "*" + $SuccessResponseString + "*") {
    # uncomment the below line if you want positive confirmation
    #"Success`t`t" + $startTime.DateTime + "`t`t" + ($endTime - $startTime).TotalSeconds + " seconds" >> $LogFile

    # remove the FailureLog if it exists to indicate we're in good shape.
    if (Test-Path $FailureLogFile) {
        Remove-Item $FailureLogFile
    }

} 
else {
    "Fail`t`t" + $startTime.DateTime + "`t`t" + ($endTime - $startTime).TotalSeconds + " seconds" >> $LogFile

    # restart the service if this is the first time it's failed since the last successful check.
    if (!(Test-Path $FailureLogFile)) {
        New-Item $FailureLogFile -type file
        "Initial failure:" + $startTime.DateTime >> $FailureLogFile
        Restart-Service $ServiceName
    }
}

このスクリプトの唯一のロジックは、最初の失敗の後、サービスの再起動を 1 回だけ試行することです。これは、サービスの再起動に時間がかかり、再起動中にモニターが障害を認識し続けて再起動する (悪い無限ループ) という状況を防ぐためです。それ以外の場合は、メール通知を追加したり、サービスを再起動するだけでなく、何でもできます。

このスクリプトは 1 回実行されるため、繰り返しを外部で制御する必要があります。スクリプト内で無限ループに入れることもできますが、それは少し不安定に思えます。Windows タスク スケジューラを使用して、次のように実行しました。 プログラム: Powershell.exe 引数: -command "C:\projects\foo\scripts\monitor.ps1" -noprofile 開始: C:\projects\foo\scripts

VisualCron などのより堅牢なスケジューラを使用して、Windows サービスにプラグインするか、Quart.NET などのアプリケーション サーバー スケジューラを使用することもできます。私の場合、タスク スケジューラは正常に動作します。

于 2009-06-19T02:37:13.183 に答える
1

RGE Inc ( http://www.ipsentry.com/ )の ipsentry を使用しています。

数年間使用して、何度も救われました。

彼らとは何の関係もありません。これは広告ではなく、満足した顧客からの情報です。

于 2015-02-09T16:36:42.537 に答える
0

これは、Windows に同梱されている Service Control Manager を使用して、少なくとも部分的に実現できます。サービスアプリケーションを監視し、起動時にそれらを自動的に開始したり、クラッシュしたときに再起動したりできます。アプリケーションをサービスとして記述することも 1 つのオプションですが、アプリケーションをサービスとして記述できない場合は、プロセスをラップすることを試みることができます。srvany.exeWindows リソース キットで 使用します。

サービスの作成に関する詳細情報: https://support.microsoft.com/en-us/kb/137890

実際の監視機能については、何が利用できるのか、または SCM の機能の拡張については完全にはわかりません。

于 2015-10-02T17:12:09.947 に答える