MRTG als Windows-Dienst ausführen

MRTG als Windows-Dienst ausführen

Wir haben gerade mrtg auf unserem Windows Server 2012 installiert und ich habe Probleme, es als Dienst auszuführen. Ich folge der Anleitung hier, aber ich stecke immer noch fest.

Erstens: Wenn ich mrtg manuell ausführe und dabei eine Konfigurationsdatei angebe, funktioniert es und generiert Diagramme.

Aber für den Dienst habe ich die Dateien srvany.exeund instsrv.exein abgelegt c:\mrtg\bin (ich habe die Versionsnummer aus dem Verzeichnisnamen entfernt, sodass sich jetzt alles unter befindet c:\mrtg).

instsrv MRTG c:\mrtg\bin\srvany.exe

Und ich habe die Regedit-Datei in die Registrierung integriert und kann sehen, dass die Schlüssel da sind, wenn ich nachschaue. Sie können am Pfad zu Perl erkennen, dass ich die 64-Bit-Version von Perl installiert habe.

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\\"

Nachdem ich das alles gemacht habe, wird der Dienst zwar erstellt, aber wenn ich versuche, ihn zu starten, startet und stoppt er.

Also habe ich ein Domänenkonto für den Dienst erstellt und es dem Dienst zugewiesen und Lese-/Schreib-/Änderungsrechte für das mrtg-Verzeichnis und sein Webverzeichnis erteilt, aber es startet immer noch nicht.

Was vermisse ich?

[aktualisieren]

Auch wenn ich die Befehlszeile verwende, die dem entspricht, was im Registrierungseintrag festgelegt ist, tritt ein merkwürdiges Verhalten auf.

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.

[aktualisieren]

ICHich hab das hier gerade gefunden, in dem steht, dass svrany.exe nicht wirklich für Windows 7 (oder Server 2012 danach) geeignet ist. Ich weiß, dass einige der Links auf der mrtg-Site ziemlich alt sind. Vielleicht kann ich sie einfach nicht verwenden srvany?

Aber ich glaube, ich habe wahrscheinlich ein Konfigurationsproblem.

Antwort1

Okay! Das Problem war, dass srvany.exe auf neueren Windows-Modellen nicht richtig funktioniert. AberHerunterladensteht nssmfürnicht-saugender-Service-Manager- toller Name!

Also habe ich eine Batchdatei mit diesem Inhalt erstellt.

::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

Nachdem ich dies getan hatte, wurde der Dienst sofort gestartet. Jetzt kann ich sehen, nssm.exedass er wperl(mit der richtigen Befehlszeile) in der Prozessliste ausgeführt wird. Und ich kann den Dienst ändern, indem ich das Batch-Skript ändere.

Jetzt können Sie es stoppen mitnssm stop mrtg

und beginnen Sie mitnssm start mrtg

(oder Sie können auch andere Windows-Dienste verwalten, wenn Sie möchten)

verwandte Informationen