创建并执行命令

云助手命令可以在ECS实例中快速完成运行自动化运维脚本、轮询进程、重置用户密码、安装或者卸载软件、更新应用以及安装补丁等一些日常任务。本文介绍如何创建并执行云助手命令。

前提条件

  • 实例的状态必须为运行中(Running)。

  • 已安装云助手Agent。具体操作,请参见安装云助手Agent

    使用定时任务的新特性(固定时间间隔执行、仅在指定时间执行一次、基于Cron表达式定时执行时指定年份或时区)时,需确保云助手Agent不低于以下版本:

    • Linux:2.2.3.282

    • Windows:2.1.3.282

    如果执行定时任务结果返回ClientNeedUpgrade错误码,请将客户端更新至最新版本。具体操作,请参见升级或禁止升级云助手Agent

使用限制

创建并执行云助手命令时,您需要注意以下事项:

  • 创建的脚本在Base64编码后大小说明如下:

    • 执行并保存命令:不能超过18 KB。

    • 执行但不保存命令:不能超过24 KB。

  • 调用API执行命令时最多可以选择100台实例。您也可以申请提升配额(配额名称为命令执行支持实例上限数),关于如何查询及提升配额,请参见查看和提升资源配额

  • 在一个阿里云地域下,您可以保存500~50,000条云助手命令,配额随您的云服务器使用情况可能会增加。您也可以申请提升配额,关于如何查询及提升配额,请参见配额管理在立即执行命令时,如果您只执行但不保存命令,则不占用云助手命令配额。

    说明

    填写详细的配额提升申请理由可提高审批通过率。

操作步骤

通过控制台立即执行命令

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择运维与监控 > 云助手

  3. 在页面左侧顶部,选择目标资源所在的资源组和地域。地域

  4. 在页面右上角,单击创建/执行命令

  5. 命令信息区域,设置参数。

    名称

    描述

    命令来源

    选择命令来源。

    • 输入命令内容:创建一个新命令。

    • 选择已保存的命令:选择已创建的命令。

    命令类型

    选择命令类型。

    • Linux:选择ShellPython或者Perl

    • Windows:选择Bat或者PowerShell

    命令内容

    编辑或者粘贴您的命令。

    有关Shell命令的示例,请参见查看实例系统配置

    创建命令时,您需要自行测试命令的语法、逻辑或算法是否正确。

    例如,假设您已在实例中创建了一个/backup目录(mkdir /backup),以下Shell命令将在该目录中归档一个文件。

    #!/bin/bash 
    OF=/backup/my-backup-$(date +%Y%m%d).tgz
    tar -cf $OF {{file}}
    说明

    以上示例命令中,{{file}}是一个自定义参数,您可以在执行命令时设置为需要归档的目标文件,例如/app/usrcredential。自定义参数能满足动态取值以及一值多用的场景。对于具有安全敏感性的数据以及随环境变化的数据,建议您设置自定义参数,例如AccessKey、实例ID、授权码、时间参数、关键系统文件等。

    使用参数

    选择是否启用参数。

    如果您开启了使用参数功能,在命令内容中以{{key}}格式设置自定义参数。

    说明

    一份云助手命令中的自定义参数不能超过20个。

    您可以指定内置环境参数作为自定义参数,执行命令时无需手动对参数赋值,云助手将为您自动替换为环境中对应的值。支持指定以下内置环境参数:

    • {{ACS::RegionId}}:地域ID。

    • {{ACS::AccountId}}:阿里云主账号UID。

    • {{ACS::InstanceId}}:实例ID。

      说明

      命令下发到多个实例时,如需指定{{ACS::InstanceId}}作为内置环境参数,需确保安装云助手Agent不低于以下版本:

      • Linux:2.2.3.309

      • Windows:2.1.3.309

    • {{ACS::InstanceName}}:实例名称。

      说明

      命令下发到多个实例时,如需指定{{ACS::InstanceName}}作为内置环境参数,需确保安装云助手Agent不低于以下版本:

      • Linux:2.2.3.344

      • Windows:2.1.3.344

    • {{ACS::InvokeId}}:命令执行ID。

      说明

      如需指定{{ACS::InvokeId}}作为内置环境参数,需确保安装云助手Agent不低于以下版本:

      • Linux:2.2.3.309

      • Windows:2.1.3.309

    • {{ACS::CommandId}} :命令ID。

      说明

      通过调用RunCommand接口执行命令时,如需指定 {{ACS::CommandId}}作为内置环境参数,需确保安装云助手Agent不低于以下版本:

      • Linux:2.2.3.309

      • Windows:2.1.3.309

    执行计划

    选择命令执行计划。

    • 立即执行:单击执行执行并保存后,系统立即执行命令。

    • 系统下一次启动后:单击执行执行并保存后,实例下次启动时执行命令。

    • 系统每次启动后:单击执行执行并保存后,实例每次启动时执行命令。

    • 定时执行:单击执行执行并保存后,系统在设置的时间间隔或者时间点执行命令。定时执行包括以下几种方式:

      • 固定时间间隔执行:基于Rate表达式,按照设置的时间间隔执行命令。时间间隔支持按秒、分钟、小时和天来选择,适用于在固定时间间隔执行任务的场景。

        说明

        固定时间间隔执行有以下限制条件:

        • 设置的时间间隔不大于7天、不小于60秒,且需大于定时任务的超时时间。

        • 执行间隔只基于固定频率,与任务实际执行需要的时间无关。例如设置每5分钟执行一次命令,任务需要2分钟执行完成,则在任务完成3分钟后继续执行下一轮。

        • 创建任务时不会立即执行。例如设置每5分钟执行一次命令,创建任务时不会立即执行一次命令,而是在任务创建完成后的5分钟后开始执行。

      • 仅在指定时间执行一次:按照设置的时区和执行时间点执行一次命令。

        例如设置执行时间2022-05-17 17:30:50时区(GMT+8:00) Asia/Shanghai,即表示系统会在中国/上海时间,2022年05月17日17点30分50秒执行一次命令。

      • 基于时钟定时执行:基于Cron表达式,按照设置的定时任务执行命令。重复频率可精确到秒、分钟、小时、日期、月份、星期、年份,在指定的时区下,根据Cron表达式推算定时任务执行时间并执行。配置灵活,适用于较复杂的定时任务执行场景。关于Cron表达式的更多信息,请参见Cron表达式

        说明

        设置的最小时间间隔需大于或等于定时任务的超时时间,且不小于10 秒。

        例如设置重复频率0 0 12 ? * WED 2022时区(GMT+8:00) Asia/Shanghai,即表示系统会在中国/上海时间,2022年每个星期三中午12:00执行命令。

    命令名称

    设置命令名称。

    命令描述

    设置命令的描述信息。建议设置命令用途等信息,方便后续管理维护。

    执行用户

    在ECS实例中执行命令的用户名称。

    使用最小权限执行命令是权限管理的最佳实践,建议您以普通用户身份执行云助手命令。更多信息,请参见设置普通用户执行云助手命令

    默认情况下,在Linux实例中以root用户执行命令,在Windows实例中以System用户执行命令。

    执行路径

    自定义命令的执行路径。默认路径如下:

    • Linux:默认在root用户的/home目录。

    • Windows:默认在C:\Windows\system32目录。

    超时时间

    设置命令在实例中的超时时间,当执行命令的任务超时后,云助手将强制终止任务进程。

    单位为秒,默认为60秒,最小为10秒。如果您设置的超时时间小于10秒,为确保命令执行成功,会被系统设置为10秒。

    标签

    设置命令的标签键标签值,方便后续分类管理维护。

    说明
    • 当您在选择实例后,单击执行并保存时,系统会同时为命令和命令执行设置标签信息。

    • 当您在选择实例后,单击执行时,系统只会为命令设置标签信息。

  6. 选择实例选择托管实例区域,选中需要执行命令的目标实例。

    说明

    托管实例是云助手托管的非阿里云服务器,更多信息,请参见阿里云托管实例

  7. 单击执行并保存执行,立即开始执行任务。

通过CLI立即执行命令

单次执行命令示例

  • 请求示例:

    调用RunCommand接口创建一个名为update的云助手命令,为实例进行系统更新。

    aliyun ecs RunCommand --RegionId 'cn-hangzhou' \
    --Name 'update' --Username 'ecs-user' --Type 'RunShellScript' \
    --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \
    --Timeout '60' --RepeatMode 'Once' --ContentEncoding 'Base64' \
    --InstanceId.1 'i-bp12e0ib2ztibede****'
    说明

    半角单引号('')内为参数的示例取值,您需要根据实际情况修改。

    主要参数说明如下,更多参数说明,请参见RunCommand

    名称

    示例

    描述

    RegionId

    cn-hangzhou

    地域ID。

    Name

    update

    命令名称。

    Username

    ecs-user

    在ECS实例中执行命令的用户名称。

    Type

    RunShellScript

    命令类型。

    • Linux:RunShellScript

    • Windows:RunBatScript或者RunPowerShellScript

    CommandContent

    eXVtIHVwZGF0ZSAteQ==

    通过Base64编码后的命令内容。

    Timeout

    60

    超时时间。

    RepeatMode

    Once

    执行计划。

    ContentEncoding

    Base64

    编码方式。

    InstanceId.1

    i-bp12e0ib2ztibede****

    需要执行命令的实例ID。

  • 返回示例:

    {
            "CommandId": "c-hz018qlm868****",
            "InvokeId": "t-hz018qlm86d****",
            "RequestId": "1D24FA80-64DB-4842-AB20-25207994418F"
    }

定时执行命令示例

  • 请求示例:

    调用RunCommand接口创建一个名为update的云助手命令,在中国/上海时间2022年每天中午12:00定时为实例进行系统更新。

    aliyun ecs RunCommand --RegionId 'cn-hangzhou' \
    --Name 'update' --Description 'update' --Username 'ecs-user' --Type 'RunShellScript' \
    --CommandContent 'eXVtIC15IHVwZGF0ZQ==' \
    --Timeout '60' --RepeatMode 'Period' --ContentEncoding 'Base64' \
    --Frequency '0 0 12 * * ? 2022 Asia/Shanghai' \
    --InstanceId.1 'i-bp12e0ib2ztibede****'
    说明

    半角单引号('')内为参数的示例取值,您需要根据实际情况修改。

    主要参数说明如下,更多参数说明,请参见RunCommand

    名称

    示例

    描述

    RegionId

    cn-hangzhou

    地域ID。

    Name

    update

    命令名称。

    Description

    update

    命令描述。

    Username

    ecs-user

    在ECS实例中执行命令的用户名称。

    Type

    RunShellScript

    命令类型。

    • Linux:RunShellScript

    • Windows:RunBatScript或者RunPowerShellScript

    CommandContent

    eXVtIC15IHVwZGF0ZQ==

    通过Base64编码后的命令内容。

    Timeout

    60

    超时时间。

    RepeatMode

    Period

    执行计划。

    ContentEncoding

    Base64

    编码方式。

    Frequency

    0 0 12 * * ? 2022 Asia/Shanghai'

    定时执行命令的执行周期。

    InstanceId.1

    i-bp12e0ib2ztibede****

    需要执行命令的实例ID。

  • 返回示例:

    {
            "CommandId": "c-hz018qlm868****",
            "InvokeId": "t-hz018qlm86d****",
            "RequestId": "1D24FA80-64DB-4842-AB20-25207994418F"
    }