Action типа "Execute action on remote agent" не работает...

Started by Anth0ny, October 14, 2008, 06:30:22 PM

Previous topic - Next topic

Anth0ny

Не могу понять, где я не прав.
Прошу помочь- разъяснить.

Версия - 0.2.22.

ОС сервера NetXMS - Windows 2008.
ОС с Агентом - Windows 2003

Ведь всё вроде просто: https://www.netxms.org/forum/index.php/topic,204.0.html
Действовал в точности с инструкцией.

1) Создал Action типа "Execute action on remote agent".
Remote host: %a
Action: ResetSpooler

(Сразу вопрос: а почему в поле Action сразу нельзя использовать команды windows-шелла? если например мне не нужно ничего кроме перезапуска сервиса, то почему сразу нельзя использовать простейшую конструкцию типа "net stop spooler && net start spooler", а приходится создавать ватник на сервере, на котором должна быть выполнены данные команды?)

2) На сервере, за спулером которого мы приглядываем, в подкаталоге VAR каталоге Агента NetXMS (C:\Program Files\NetXMS\var) создал файл reset_spooler.cmd следующего содержания:

(Я не нашёл :-\ конкретных рекомендаций в форуме и документации на тему, ГДЕ ЖЕ нужно хранить исполняемые скрипты, нашёл только упоминание про \VAR\)


@echo off
@sc stop spooler
@cs start spooler
@sc query spooler >>query.log


3) В конфиг Агента добавлена строка: ActionShellExec = ResetSpooler:reset_spooler.cmd. Агент перезапущен через редактор конфига (Save and apply).
4) Создан DCI, отслеживающий состояние сервиса Windows Spooler: System.ServiceState(spooler).
5) Используется стандартный Event типа SYS_SERVICE_DOWN (Last polled value - not equal - 0).
6) Используется стандартный обработчик Event Processing Policy для SYS_SERVICE_DOWN, к нему привязаны 2 Action'а, Mail to admin (тип - Send e-mail) и Reset service (тип - Execute action on remote agent)

Всё. Судя по Форуму, начиная с этого момента всё должно начать работать...
Однако ж нет, из двух указаных Action срабатывает только mail to (и прекрасно работает), а вот скрипт НИ В КАКУЮ выполняться не хочет...

И хуже всего то, что нет никакой отладочной информации, чтобы понять, в каком именно месте я ошибся. Если ошибся.
Прошу помочь разобраться с данной проблемой. Существует ли какой-нибудь способ понять, почему не выполняется скрипт? Можно ли как-то вызвать дополнительную отладочную информацию и с её помощь понять причину проблемы?

???

Victor Kirhenshtein

Tut sluchajno net opechatki?

@echo off
@sc stop spooler
@cs start spooler
@sc query spooler >>query.log

Anth0ny

да тут я вручную писал... очепятка.  :D
в моём собственном файле всё ок.

да и это роли по сути не играет, так как ПО ЛЮБОМУ не выполняется третья директива: дописка в кастомный файл лога состояния сервиса после перезапуска.

@sc query spooler >>query.log

я кстати и с net start \ net stop пробовал- тоже нету эффекта =(((
файл не создаётся.

я так понимаю что он должен создаться в \var\ ?

Victor Kirhenshtein

Quote from: Anth0ny on October 14, 2008, 07:30:55 PM
я так понимаю что он должен создаться в \var\ ?

Нет. Он будет создаваться в каталоге, который был текущим при запуске агента. В таких ситуациях лучше указывать полное имя файла.

Anth0ny

хмм...

а что касаемо выполнения cmd-скрипта?
тут-то что не так? не пойму...

та процедура которую я описал- правильная?

Victor Kirhenshtein

Quote from: Anth0ny on October 14, 2008, 06:30:22 PM
(Сразу вопрос: а почему в поле Action сразу нельзя использовать команды windows-шелла? если например мне не нужно ничего кроме перезапуска сервиса, то почему сразу нельзя использовать простейшую конструкцию типа "net stop spooler && net start spooler", а приходится создавать ватник на сервере, на котором должна быть выполнены данные команды?)

cmd файл можно и не создавать - вполне можно использовать


ActionShellExec = ResetSpooler:net stop spooler && net start spooler


В поле action на сервере можно использовать только предопределенные action'ы агента из соображений безопасности - например агент может настраивать другой администратор, дать серверу NetXMS доступ только на уровне ControlServer, и быть уверенным что администратор NetXMS не сможет выполнять любые команды, какие пожелает, через NetXMS агента.

Victor Kirhenshtein

Quote from: Anth0ny on October 14, 2008, 07:57:40 PM
хмм...

а что касаемо выполнения cmd-скрипта?
тут-то что не так? не пойму...

та процедура которую я описал- правильная?

По описанию - правильно. Можно прислать copy-paste конфига агента (хотя-бы строчку  Action...) ?


Anth0ny

вот, пожалуйста =)


#
# NetXMS agent configuration file
# Created by agent installer at Wed Aug 27 12:59:39 2008
#

MasterServers = monitoring.test.ru, 127.0.0.1
LogFile = {syslog}
FileStore = C:\Program Files\NetXMS\var
SubAgent = ecs.nsm
SubAgent = winperf.nsm
SubAgent = wmi.nsm
SubAgent = ups.nsm

ActionShellExec = ResetSpooler:reset_spooler.cmd


файл: C:\Program Files\NetXMS\var\reset_spooler.cmd

содержимое файла:


@echo off
@sc stop spooler
@sc start spooler
@sc query spooler >>query.log
@echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >>query.log


Anth0ny

Quote from: Victor Kirhenshtein on October 14, 2008, 08:00:09 PM
cmd файл можно и не создавать - вполне можно использовать


ActionShellExec = ResetSpooler:net stop spooler && net start spooler


а вот это сработало, спасибо! =)
но всё равно хотелось бы понять почему cmd-файл не срабатывает...

Quote from: Victor Kirhenshtein on October 14, 2008, 08:00:09 PM
В поле action на сервере можно использовать только предопределенные action'ы агента из соображений безопасности - например агент может настраивать другой администратор, дать серверу NetXMS доступ только на уровне ControlServer, и быть уверенным что администратор NetXMS не сможет выполнять любые команды, какие пожелает, через NetXMS агента.

мм.. если честно то не совсем понял о чём идёт речь... =((

Victor Kirhenshtein

Quote from: Anth0ny on October 14, 2008, 08:16:57 PM
Quote from: Victor Kirhenshtein on October 14, 2008, 08:00:09 PM
cmd файл можно и не создавать - вполне можно использовать


ActionShellExec = ResetSpooler:net stop spooler && net start spooler


а вот это сработало, спасибо! =)
но всё равно хотелось бы понять почему cmd-файл не срабатывает...

Причина в том, что не указан полный путь к .cmd файлу, и в PATH каталог C:\Program Files\NetXMS\var тоже вряд-ли прописан, поэтому Windows не может найти файл reset_spooler.cmd.

ActionShellExec = ResetSpooler:C:\Program Files\NetXMS\var\reset_spooler.cmd

должно работать.

Victor Kirhenshtein

Quote from: Anth0ny on October 14, 2008, 08:16:57 PM
Quote from: Victor Kirhenshtein on October 14, 2008, 08:00:09 PM
В поле action на сервере можно использовать только предопределенные action'ы агента из соображений безопасности - например агент может настраивать другой администратор, дать серверу NetXMS доступ только на уровне ControlServer, и быть уверенным что администратор NetXMS не сможет выполнять любые команды, какие пожелает, через NetXMS агента.

мм.. если честно то не совсем понял о чём идёт речь... =((

Если я администратор NetXMS, не имею доступа к хосту Х, но при этом там стоит NetXMS агент, то через него я могу выполнить любую команду. Если администратор хоста Х этого не хочет, ему достаточно в nxagentd.conf прописать NetXMS сервер как ControlServers, а не MasterServers, и тогда я не смогу изменить конфиг агента с сервера, а соответственно определить новые action'ы, только запускать уже прописанные в конфиге агента. Если бы агент просто принимал команды, то такого ограничения нельзя было бы сделать, и администратор NetXMS'а автоматически получал бы доступ на любой сервер с NetXMS агентом, где action'ы в принципе разрешены.

Anth0ny

Виктор, Вы как всегда правы =)
Теперь всё работает как часы.