# 2 Удаленные команды

#### Обзор

С помощью удаленных команд вы можете указать какие из предустановленных
команд будут выполнены на наблюдаемом узле сети при выполнении некоторых
условий.

Таким образом, удаленные команды являются мощным механизмом для умного
про-активного мониторинга.

Из наиболее очевидных применений функции вы можете попробовать:

-   Автоматический перезапуск какого-либо приложения (веб-сервер,
    промежуточное ПО, CRM), если оно не отвечает
-   Использовать команду IPMI 'reboot' для перезагрузки некоторого
    удаленного сервера, если он не отвечает на запросы
-   Автоматическую очистку диска (удаление старых файлов, очистка /tmp),
    если закончилось место на диске
-   Миграцию VM с одного физического сервера на другой, в зависимости от
    загрузки CPU
-   Добавление новых узлов в облачную среду при недостаточных ресурсах
    CPU (диска, памяти, чего-угодно)

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

::: noteimportant
Выполнение удаленных команд не поддерживается
через Zabbix прокси, поэтому команды с Zabbix сервера на агенте требуют
прямого подключения.
:::

Удаленные команды ограничены 255 символами. Несколько команд могут быть
выполнены один за другим при размещении их на новой строке. Удаленные
команды могут содержать макросы. Смотрите также страницу о [выполнении
команд](/ru/manual/appendix/command_execution).

Удаленные команды будут выполнены даже если намеченный узел сети в
обслуживании.

Следующее руководство содержит пошаговые инструкции о том, как настроить
удаленные команды.

#### Настройка

Удаленные команды, которые выполняются на стороне Zabbix агента
(пользовательские скрипты) сначала должны быть включены в
соответствующем
[zabbix\_agentd.conf](/ru/manual/appendix/config/zabbix_agentd).

Убедитесь, что параметр **EnableRemoteCommands** равен **1** и
раскомментирован. Перезапустите демона агента, если изменили этот
параметр.

::: noteimportant
Удаленные команды не работают с активными Zabbix
агентами.
:::

Затем, при настройке нового действия в *Настройка→Действия*:

-   На вкладке *Операции*, выберите тип операции **Удаленная команда**
-   Выберите тип удаленной команды (IPMI, Пользовательский скрипт, SSH,
    Telnet, Глобальный скрипт)
-   Введите удаленную команду

Например:

    sudo /etc/init.d/apache restart 

В этом случае, Zabbix попытается перезапустить процесс Apache. Используя
эту команду, убедитесь, что она будет выполнена Zabbix агентом (отметьте
соответствующий пункт в *Выполнять на*).

::: noteimportant
Обратите внимание на использование **sudo** -
пользователь Zabbix не имеет прав на перезапуск системных сервисов по
умолчанию. Смотрите подсказки ниже о том, как настроить
**sudo**.
:::

::: noteclassic
Zabbix агент должен работать на удаленном узле сети и должен
принимать входящие подключения. Zabbix агент выполняет команды в фоновом
режиме.
:::

::: noteimportant
Zabbix не проверяет была ли выполнена команда
успешно.
:::

Удаленные команды на Zabbix агенте выполняются без использования
какого-либо времени ожидания с помощью ключа system.run\[,nowait\]. На
Zabbix сервере удаленные команды выполняются со временем ожидания
указанном в TrapperTimeout параметре в zabbix\_server.conf файле.

-   На вкладке *Условия* определите соответствующие условия. Для этого
    примера, укажите, чтобы действие активировалось только в случае
    любых чрезвычайных проблем с одним из приложений Apache.

![](../../../../../../assets/en/manual/config/conditions_restart.png){width="700"}

#### Права доступа

Убедитесь, что пользователь 'zabbix' имеет права на выполнение
добавленных команд. Один наиболее интересный вариант - использование
**sudo** для предоставления доступа к привилегированным командам. Для
настройки доступа, выполните из под root:

    # visudo

Примеры строк, которые можно использовать в файле *sudoers*:

    # разрешает пользователю 'zabbix' выполнение любых команд без пароля.
    zabbix ALL=NOPASSWD: ALL

    # разрешает пользователю 'zabbix' перезапуск apache без пароля.
    zabbix ALL=(ALL) NOPASSWD: /etc/init.d/apache restart

::: notetip
В некоторых системах настройки в файле *sudoers* будут
препятствовать не-локальным пользователям выполнять команды. Для
изменения этого, раскомментируйте опцию **requiretty** в
*/etc/sudoers*.
:::

#### Удаленные команды в случае нескольких интерфейсов

Если целевая система имеет несколько интерфейсов выбранного типа (Zabbix
агент или IPMI), удаленные команды будут выполнены на интерфейсе по
умолчанию.

#### Удаленные команды через IPMI

В случае удаленных команд через IPMI необходимо использовать следующий
синтаксис:

    <команда> [<значение>]

где

-   <команда> - одна из IPMI команд без пробелов
-   <значение> - 'on', 'off' или любое положительное целое число.
    <значение> является опциональным параметром.

#### Примеры

##### Пример 1

Перезагрузка Windows при определенном условии.

Для того, чтобы автоматически перезагрузить Windows, когда Zabbix
обнаруживает проблемы, определим следующие действия:

|ПАРАМЕТР|Описание|
|----------------|----------------|
|Тип операции|'Удаленная команда'|
|Тип|'Пользовательский скрипт'|
|Команда|c:\\windows\\system32\\shutdown.exe -r -f|

##### Пример 2

Перезагрузка узла сети с использованием управления по IPMI.

|ПАРАМЕТР|Описание|
|----------------|----------------|
|Тип операции|'Удаленная команда'|
|Тип|'IPMI'|
|Команда|reset|

##### Пример 3

Выключение узла сети с использованием управления по IPMI.

|ПАРАМЕТР|Описание|
|----------------|----------------|
|Тип операции|'Удаленная команда'|
|Тип|'IPMI'|
|Команда|power off|
