MRTGをWindowsサービスとして実行する

MRTGをWindowsサービスとして実行する

Windows Server 2012 に mrtg をインストールしたのですが、サービスとして実行できずに困っています。 私はここのガイドに従っています、しかし、まだ行き詰まっています。

まず、設定ファイルを指定して mrtg を手動で実行すると、動作してグラフが生成されます。

しかし、サービスについては、ファイルsrvany.exeinstsrv.exeを に配置しましたc:\mrtg\bin (ディレクトリ名からバージョン番号を削除したので、すべて に配置されていますc:\mrtg)。

instsrv MRTG c:\mrtg\bin\srvany.exe

そして、regedit ファイルをレジストリにマージしたので、確認してみるとキーがそこにあります。Perl へのパスから、64 ビット バージョンの Perl がインストールされていることがわかります。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MRTG-PA500\Parameters]
 "Application"="c:\\perl64\\bin\\wperl.exe"
 "AppParameters"="c:\\mrtg\\bin\\mrtg --logging=eventlog c:\\mrtg\\bin\\mrtg-MyDevice.cfg"
 "AppDirectory"="c:\\mrtg\\bin\\"

さて、これらすべてを実行した後、サービスは確かに作成されますが、起動しようとすると、開始されて停止します。

そこで、サービス用のドメイン アカウントを作成し、それをサービスに割り当て、mrtg ディレクトリとその Web ディレクトリへの読み取り/書き込み/変更権限を付与しましたが、それでも起動しません。

何が足りないのでしょうか?

[アップデート]

また、reg エントリに設定されているものと同等のコマンドラインを使用すると、奇妙な現象が発生します。

c:\mrtg\bin>perl mrtg --logging=eventlog mrtg-mydevice.cfg
Use of uninitialized value in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 73.
Argument "Started mrtg with config 'mrtg-mydevice.cfg'\n" isn't numeric in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 46.
Use of uninitialized value in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 199. Argument "WARN" isn't numeric in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 199.
Daemonizing MRTG ...
Do Not close this window. Or MRTG will die
Use of uninitialized value in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 73.
Use of uninitialized value in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 199. Argument "WARN" isn't numeric in subroutine entry at C:/Perl64/lib/Win32/EventLog.pm line 199.

[アップデート]

これを見つけたでは、svrany.exe は Windows 7 (またはそれ以降の Server 2012) には適していないと述べられています。mrtg サイトのリンクのいくつかはかなり古いことはわかっています。 を使用できないだけでしょうかsrvany?

しかし、おそらく何らかの設定上の問題があると思います。

答え1

わかりました!問題は、srvany.exeが新しいWindowsモデルでは正しく動作しないことです。しかしnssm.exewill! nssm非サッキングサービスマネージャー- 素敵な名前ですね!

そこで、これを含むバッチファイルを作成しました。

::Monday, June 15, 2015
::http://nssm.cc/download
::Apparently, srvany.exe doesn't work right on newer Windows, so I got a 64bit nssm (non-sucking service manager) to put in its place.
::commandline directions: http://nssm.cc/commands

nssm install mrtg wperl "mrtg --logging=eventlog mrtg-mydevice.cfg"
nssm set mrtg AppDirectory c:\mrtg\bin
nssm set mrtg displayname mrtg
nssm set mrtg description "MRTG wPerl Service"
nssm set mrtg start service_auto_start
nssm start mrtg

これを実行すると、サービスがすぐに起動しました。これで、nssm.exeプロセスwperlリストで (適切なコマンドラインを使用して) 実行中であることがわかります。また、バッチ スクリプトを変更することで、サービスを変更することもできます。

だから今なら止められるnssm stop mrtg

まずはnssm start mrtg

(必要に応じて、他の Windows サービスも管理できます)

関連情報