
Acabamos de instalar o mrtg em nosso Windows Server 2012 e estou tendo problemas para executá-lo como um serviço. Estou seguindo o guia aqui, mas ainda estou preso.
Primeiro, se eu executar o mrtg manualmente, enquanto especifico um arquivo de configuração, ele funciona e gera gráficos.
Mas para o serviço, coloquei os arquivos srvany.exe
e instsrv.exe
in c:\mrtg\bin
(removi o número da versão do nome do diretório, então agora está tudo localizado em c:\mrtg
).
instsrv MRTG c:\mrtg\bin\srvany.exe
E mesclei o arquivo regedit no registro e posso ver que as chaves estão lá se eu for e olhar. Você pode ver no caminho para o Perl que instalei a versão de 64 bits do 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\\"
Agora, depois de fazer tudo isso, o serviço está de fato criado, mas quando tento iniciá-lo, ele inicia e para.
Então, criei uma conta de domínio para o serviço e atribuí-a ao serviço e concedi direitos de leitura/gravação/modificação ao diretório mrtg e ao diretório da web, mas ele ainda não inicia.
o que estou perdendo?
[atualizar]
Além disso, se eu usar a linha de comando equivalente ao que está definido na entrada de registro, recebo alguma estranheza.
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.
[atualizar]
EUacabei de encontrar isso, que afirma que svrany.exe não é realmente adequado para Windows 7 (ou Server 2012 depois disso). Eu sei que alguns dos links no site mrtg são bem antigos. Talvez eu simplesmente não consiga usar srvany
?
Mas acho que provavelmente tenho algum problema de configuração.
Responder1
OK! O problema é que srvany.exe não funciona corretamente em modelos mais recentes do Windows. Masnssm.exevai! nssm
apoiagerente de serviço não-sugador- nome bacana!
Então criei um arquivo em lote com isso.
::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
Depois de fazer isso, o serviço foi iniciado imediatamente. Agora posso ver nssm.exe
e wperl
(com a linha de comando adequada) em execução na lista de processos. E posso modificar o serviço modificando o script em lote.
Então agora você pode parar com issonssm stop mrtg
e comece comnssm start mrtg
(ou você também pode gerenciar outros serviços do Windows, se desejar)