[comment]: # translation:outdated

[comment]: # ({69a48c28-0cdc5e2e})
# 2 远程命令

[comment]: # ({/69a48c28-0cdc5e2e})

[comment]: # ({0a41f755-15f695f8})
#### 概述

使用远程命令，您可以定义在某些情况下，监视的主机上会自动执行某个预定义的命令。

因此，远程命令是智能主动监控的强大机制。

在功能最明显的用途中，您可以尝试：

-   如果没有响应，则自动重新启动某些应用程序（Web服务器，中间件，CRM）
-   如果不响应请求，请使用IPMI“reboot”命令重新启动一些远程服务器
-   如果磁盘空间不足，可自动释放磁盘空间（删除较旧的文件，清理/tmp）
-   根据CPU负载，将VM从一个物理机移植到另一个物理机
-   在CPU（磁盘，内存，任何资源）不足的情况下，将新节点添加到云环境中

配置远程命令的操作类似于发送消息的操作，唯一的区别是Zabbix将执行命令而不是发送消息。

远程命令可以通过Zabbix server, proxy 或 agent执行。其在Zabbix
agent上可以直接通过Zabbix server 或 Zabbix proxy执行。同时，在Zabbix
agent和Zabbix
proxy上的远程命令默认是不开启的,通过将参数EnableRemoteCommands设置为1开启。

远程命令限制为255个字符。可以通过将多个命令放置在新行上来执行多个命令。远程命令可能包含宏。

-   如果没有响应，则自动重新启动某些应用程序（Web服务器，中间件，CRM）
-   如果不响应请求，请使用IPMI“reboot”命令重新启动一些远程服务器
-   如果磁盘空间不足，可自动释放磁盘空间（删除较旧的文件，清理/ tmp）
-   根据CPU负载，将VM从一个物理盒移植到另一个物理盒
-   在CPU（磁盘，内存，任何资源）不足的情况下，将新节点添加到云环境中

配置远程命令的操作类似于发送消息的操作，唯一的区别是Zabbix将执行命令而不是发送消息。

即使目标主机处于维护状态，也会执行远程命令。

以下教程提供了有关如何设置远程命令的分步说明。

[comment]: # ({/0a41f755-15f695f8})

[comment]: # ({04ab0f48-dc06d94d})
#### 配置

在Zabbix代理（自定义脚本）上执行的那些远程命令必须首先在相应的命令中启用
[zabbix\_agentd.conf](/manual/appendix/config/zabbix_agentd).

确保\*\* EnableRemoteCommands **参数设置为** 1 \*\*并取消注释。
如果更改此参数，请重新启动代理守护程序。

::: noteimportant
远程命令不适用于主动模式Zabbix代理。
:::

然后，在配置新的动作时进入*配置 - >操作*:

-   定义适当的条件。
    在此示例中，设置在Apache应用程序之一的任何灾难问题时激活该操作：

![](../../../../../../assets/en/manual/config/conditions_restart.png)

-   在*操作*选项卡中，选择**远程命令**操作类型
-   选择远程命令类型（IPMI，自定义脚本，SSH，Telnet，全局脚本）
-   输入远程命令

例如：

    sudo /etc/init.d/apache restart 

在这种情况下，Zabbix将尝试重新启动Apache进程。
使用此命令，确保该命令在Zabbix代理上执行 (点击//
Zabbix代理*按钮*执行//)。

::: noteimportant
Note the use of **sudo** -
默认情况下，Zabbix用户没有权限重新启动系统服务。 有关如何配置\*\* sudo
\*\*的提示，请参见下文。
:::

::: noteclassic
Zabbix代理应在远程主机上运行并接受传入连接。Zabbix代理在后台执行命令。
:::

Zabbix代理程序上的远程命令由系统无延迟执行。运行\[，nowait\]键，不检查执行结果。在Zabbix服务器上，远程命令是在zabbix\_server的TrapperTimeout参数中设置的超时执行的。conf文件被
[检查](/manual/appendix/command_execution#exit_code_checking)
以执行结果。

[comment]: # ({/04ab0f48-dc06d94d})

[comment]: # ({2c657779-a1b1e7ea})
#### 访问权限

确保'zabbix'用户具有已配置命令的执行权限。可能有兴趣使用\*\* sudo
\*\*来访问特权命令。 要配置访问，请以root身份执行：

    # visudo

可以在 *sudoers*文件中使用的行:

    # allows 'zabbix' user to run all commands without password.
    zabbix ALL=NOPASSWD: ALL

    # allows 'zabbix' user to restart apache without password.
    zabbix ALL=NOPASSWD: /etc/init.d/apache restart

<note
tip>在某些系统上*sudoers*文件将阻止非本地用户执行命令。若要修改，在*/etc/sudoers*中添加**requiretty**注释。
:::

[comment]: # ({/2c657779-a1b1e7ea})

[comment]: # ({1c317b7b-1f3becef})
#### 具有多个接口的远程命令

如果目标系统具有所选类型的多个接口（Zabbix代理或IPMI），则将在默认接口上执行远程命令。

可以通过SSH和Telnet使用除Zabbix代理之外的其他界面执行远程命令。
可用的使用界面按以下顺序选择：

      * Zabbix agent default interface
      * SNMP default interface
      * JMX default interface
      * IPMI default interface

对于IPMI远程命令，应使用以下语法：

    <command> [<value>]

where

-   <command> - one of IPMI commands without spaces
-   <value> - 'on', 'off' or any unsigned integer. <value>
    is an optional parameter.

[comment]: # ({/1c317b7b-1f3becef})

[comment]: # ({6863fa4f-26b199db})
#### 示例

[comment]: # ({/6863fa4f-26b199db})

[comment]: # ({b6e550d1-4c860844})
##### 示例 1

在一定条件下重新启动Windows。

为了在Zabbix检测到问题时自动重新启动Windows，请定义以下操作：

|参数             说|<|
|----------------------|-|
|Operation type|'Remote command'|
|Type|'Custom script'|
|Command|c:\\windows\\system32\\shutdown.exe -r -f|

[comment]: # ({/b6e550d1-4c860844})

[comment]: # ({20740245-deb28bf3})
##### 示例 2

使用IPMI控制重新启动主机。

|参数             说|<|
|----------------------|-|
|Operation type|'Remote command'|
|Type|'IPMI'|
|Command|reset|

[comment]: # ({/20740245-deb28bf3})

[comment]: # ({e05966ae-0d8270fe})
##### 示例 3

使用IPMI控制关闭主机电源。

|参数             说|<|
|----------------------|-|
|Operation type|'Remote command'|
|Type|'IPMI'|
|Command|power off|

[comment]: # ({/e05966ae-0d8270fe})

[comment]: # ({d5ff30e8-d5ff30e8})
##### Example 3

Power off the host by using IPMI control.

|PARAMETER|Description|
|---------|-----------|
|Operation type|'Remote command'|
|Type|'IPMI'|
|Command|power off|

[comment]: # ({/d5ff30e8-d5ff30e8})
