web-dev-qa-db-ja.com

アプリケーションがWindowsServer 2008で実行されているかどうかを監視するにはどうすればよいですか?

私たちは主にLinuxショップですが、Windows Server 2008を実行しているプリントサーバーがあり、PrintHelperというアプリケーションを使用して請求書を印刷しています。このアプリケーションが実行されていることを確認し、実行されていない場合は自動的に再起動する方法を見つける必要があります。

Linuxでは、おそらく小さなシェルスクリプトとcronジョブを使用してこれを実行しますが、WindowsServerでこれを実行する方法がわかりません。私はProc :: Backgroundを使用してPerlでそれを実行できるとかなり確信していますが、1つのスクリプトだけでPerlをインストールすることには消極的であり、PowerShellのようなものを使用して実行できると確信していますが、実際には価値がありません。 1つの小さなタスクのためにPowerShellを学ぶために私の時間を使用します。 Tasklistは、特定のプロセスが実行されているかどうかを通知できるという点で、私が望むことのいくつかを実行しているようですが、クラッシュした場合にアプリケーションを自動的に再起動する方法がわかりません。

どんな助けもありがたく受けました!

3
mattbd

ワオ。別の質問に答えました。

sc.exe または srvany.exe (減価償却されていると思います)を使用して、PrintHelperプロセスを「デーモン化」する必要があります。次に、組み込みサービスの「回復」オプションを利用して、障害イベント(スクリプトの実行、snmpトラップの送信、電子メールの送信、そしてもちろんサービスの再起動を含む)を処理できます。

与えられたように:

_sc create printhelper binpath= "c:\program files\Print Helper\phelper.exe" start= auto depend= Spooler/lanmanserver DisplayName= "Print Helper"_

これにより、_Print Helper_という表示名のprinterhelperという名前のサービスが作成され、_"c:\program files\Print Helper\phelper.exe"_が自動的に実行され、PrintSpoolerおよびSMB/CIFSサーバーサービスの依存関係が_NT AUTHORITY\SYSTEM_組み込みユーザー。

5
mbrownnyc

Nagiosを使用している場合は、NSClient ++アドオンを使用して実行できます。

監視サーバーで、サービスを定義します。

define service{
   use                 generic-printer
   Host_name           hostname
   service_description appname
   check_command       check_nt!PROCSTATE!-d SHOWALL -l appname.exe
   contact_groups      admin-sms
   event_handler       autostart_appname!hostname
   }

autostart_appnamecommands.cfgで定義されています。

define command { 
    command_name    autostart_appname
    command_line    $USER1$/eventhandlers/autostart_appname.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}

イベントハンドラスクリプトautostart_appname.sh

#!/bin/sh

HOSTADDRESS=$4

case "$1" in
OK)
    ;;
WARNING)
    ;;
UNKNOWN)
    ;;
CRITICAL)
    case "$2" in
    SOFT)
    ;;  
    HARD)
        /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS -c autostart_appname
        ;;
    esac
    ;;
esac
exit 0

Windowsサーバーでは、NSC.iniでコマンドを定義します。

[NRPE Handlers]
autostart_appname=C:\Program Files\NSClient++\scripts\autostart_appname.cmd

バッチスクリプトは次のように単純です。

net start "Application Name"
1
quanta

このタスクに費やす時間をできるだけ少なくしたいようです。私たちは皆、プリントサーバーを平等に嫌っています。 Windowsに組み込まれている設定のみを使用して、サービスを作成し、サービスを自動的に回復し、サービスの基本的な監視を実装できます。

ステップ1サービスを作成する

([サービス]コントロールパネルにサービスエントリが既にある場合は、この手順をスキップできます)

Sc.exeを使用して新しいサービスを作成します。

sc.exe create PrintHelper start=auto binPath="C:\<Print Helper Path and Flags>" DisplayName="Print Helper"

ステップ2サービスを構成する

サービスのコントロールパネルで、新しいサービスを右クリックしてプロパティを選択し、[リカバリ]タブを選択します。必要に応じて構成します。

ここには多くのオプションがあり、最初の失敗、2番目の失敗で何をするか、失敗時に別のアプリケーションを実行することもできます。

ステップ3サービスの監視

印刷ヘルパーの特定のイベントの失敗に関する電子メールを送信するようにイベントビューアーを構成します(イベントを右クリックして、このイベントの[タスクの添付]を選択します)。

または、外部プログラムを回復メカニズムとして使用して、障害時に電子メールを送信するようにサービスを構成します。

免責事項

もちろん、実際の監視ソリューションにはnagiosやSCOMなどを使用することをお勧めします。しかし、それ自体はまったく新しい問題です。

0
Joseph Kern