Faça com que o MRTG seja executado como serviço do Windows

Faça com que o MRTG seja executado como serviço do Windows

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.exee instsrv.exein 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! nssmapoiagerente 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.exee 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)

informação relacionada