我们刚刚在Windows 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目录读/写/修改权限,但它仍然无法启动。
我遗漏了什么?
另外,如果我使用与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.
I 刚找到这个,它声明svrany.exe并不适合Windows7(或之后的Server 2012 )。我知道在mrtg网站上的一些链接是相当古老的。也许我只是不能用srvany
?
但我想我可能有一些配置问题。
发布于 2015-06-15 17:09:00
好吧!问题是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
和wperl
(它是正确的命令行)在进程列表中运行。我可以通过修改批处理脚本来修改服务。
所以现在你可以用nssm stop mrtg
阻止它了
并从nssm start mrtg
开始
(如果您愿意,也可以管理其他windows服务)
https://serverfault.com/questions/699244
复制