Получить MRTG для запуска в качестве службы Windows
Мы только что установили mrtg на наш Windows Server 2012, и у меня возникли проблемы с его запуском в качестве службы. Я следую за гидом здесь, но все еще застрял.
Во-первых, если я запускаю 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 и его веб-каталога, но он все равно не запустится.
Что мне не хватает?
[Обновить]
Кроме того, если я использую командную строку, эквивалентную той, которая установлена в записи 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.
[Обновить]
Я только что нашел это, в котором говорится, что svrany.exe не очень подходит для Windows 7 (или Server 2012 после этого). Я знаю, что некоторые ссылки на сайте mrtg довольно старые. Может быть, я просто не могу использовать srvany
?
Но я думаю, что у меня, вероятно, есть проблемы с конфигурацией.
1 ответ
Хорошо! Проблема состояла в том, что srvany.exe не будет работать правильно на более новых моделях Windows. Но nssm.exe будет! nssm
расшифровывается как non-sucking-service-manager - отличное имя!
Поэтому я создал пакетный файл с этим в нем.
::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, если хотите)