
我們剛剛在 Windows Server 2012 上安裝了 mrtg,但我無法將其作為服務運行。 我正在按照這裡的指南進行操作,但我還是卡住了。
首先,如果我手動運行 mrtg,同時指定配置文件,它確實可以工作並生成圖表。
但對於該服務,我將文件srvany.exe
和instsrv.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.exe
and wperl
(使用正確的命令列)在進程列表中運行。我可以透過修改批次腳本來修改服務。
所以現在你可以停止它nssm stop mrtg
並開始它nssm start mrtg
(或者如果您願意,您也可以管理其他 Windows 服務)