讓 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 目錄的讀取/寫入/修改權限,但它仍然無法啟動。

我缺什麼?

[更新]

另外,如果我使用與註冊表項中設定的命令列等效的命令列,那麼我會感到有些奇怪。

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.exe將要! 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.exeand wperl(使用正確的命令列)在進程列表中運行。我可以透過修改批次腳本來修改服務。

所以現在你可以停止它nssm stop mrtg

並開始它nssm start mrtg

(或者如果您願意,您也可以管理其他 Windows 服務)

相關內容