阿里云服务器RunCommand-[云淘科技_教程]

调用RunCommand在一台或多台ECS实例中执行一段Shell、PowerShell或者Bat类型的脚本。

接口说明

不同于通过CreateCommand和InvokeCommand执行命令,RunCommand只需一次调用即可完成命令的创建与执行。

调用该接口时,您需要注意:

  • 目标实例的状态必须为运行中(Running),您可以调用DescribeInstances查询。
  • 目标实例必须预先安装云助手Agent。
  • 执行PowerShell类型的命令时,您需要确保目标ECS Windows实例已经配置了PowerShell模块。
  • 当您基于Cron表达式执行定时任务且指定了时区,时钟定时执行时间设置基准为您指定的时区;当您没有指定时区时,时钟定时执行时间设置基准为ECS实例内的系统时区,且执行时间以实例的系统时间为准。请确保ECS实例的时间或者时区与您预期的时间一致。关于时区的更多信息,请参见设置Linux实例时区和NTP服务或设置Windows实例NTP服务。
  • 您可以通过指定参数Timeout为命令设置在ECS实例中执行时最大的超时时间,命令执行超时后,云助手Agent会强制终止进程。
    • 单次执行超时后,命令的执行状态(InvokeRecordStatus)变为执行失败(Failed)。
    • 定时执行的超时时间对每一次执行记录均有效,上次执行超时不影响下一次执行。某次执行超时后,执行状态(InvokeRecordStatus)变为执行失败(Failed)。

      云助手Agent版本需要不低于以下对应的版本才能支持定时任务的新特性(固定时间间隔执行、仅在指定时间执行一次、基于Cron表达式定时执行时指定年份或时区)。如果结果返回ClientNeedUpgrade错误码,请参见升级或禁止升级云助手Agent,将客户端更新至最新版本。

      • Linux:2.2.3.282。
      • Windows:2.1.3.282。
  • 命令可能会因为目标实例的状态异常、网络异常或云助手Agent异常而出现无法执行的情况,无法执行时不会生成执行信息。更多信息,请参见执行失败常见错误及修复建议。
  • EnableParameter=true时会启用自定义参数功能。在设置CommandContent时可以通过{{parameter}}的形式表示自定义参数,并在运行命令时,传入自定义参数键值对。
  • 在一个地域下,根据您的使用情况,最多可以保有500~10000条云助手命令,您可以通过查看资源配额或调用DescribeAccountAttribute查询配额情况。
  • 建议您先调用DescribeCloudAssistantStatus查询实例的云助手状态,当CloudAssistantStatus为true时再执行命令,尤其对于新购实例。

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

请求参数

名称

类型

是否必选

示例值

描述

Action String RunCommand

系统规定参数。取值:RunCommand

RegionId String cn-hangzhou

地域ID。您可以调用DescribeRegions查看最新的阿里云地域列表。

ResourceGroupId String rg-bp67acfmxazb4p****

命令执行的资源组ID,当指定该参数时:

  • InstanceId对应的ECS实例必须属于该资源组。
  • 支持通过指定该参数筛选出对应的命令执行结果(通过调用DescribeInvocations或DescribeInvocationResults)。
Name String testName

命令名称。支持全字符集,长度不得超过128个字符。

Description String testDescription

命令描述。支持全字符集,长度不得超过512个字符。

Type String RunShellScript

运维命令的语言类型。取值范围:

  • RunBatScript:适用于Windows实例的Bat命令。
  • RunPowerShellScript:适用于Windows实例的PowerShell命令。
  • RunShellScript:适用于Linux实例的Shell命令。
CommandContent String ZWNobyAxMjM=

命令内容。命令内容可以是明文内容或Base64编码后的内容。您需要注意:

  • 若保存命令,命令内容在Base64编码后的大小不能超过18 KB;若不保存命令,命令内容在Base64编码后的大小不能超过24 KB。您可通过KeepCommand设置是否保留命令。
  • 如果您的命令内容是Base64编码后的内容,则必须设置ContentEncoding=Base64
  • 指定参数EnableParameter=true可在命令内容中启用自定义参数功能:
    • {{}}包含的方式定义自定义参数,在{{}}内参数名前后的空格以及换行符会被忽略。
    • 自定义参数个数不能超过20个。
    • 自定义参数名允许a-zA-Z0-9-_的组合,不支持acs::前缀指定非内置环境参数,不支持其余字符,参数名不区分大小写。
    • 单个自定义参数名不能超过64字节。
  • 您可以指定内置环境参数作为自定义参数,执行命令时无需手动对参数赋值,云助手将为您自动替换为环境中对应的值。支持指定以下内置环境参数:
    • {{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。通过调用本接口执行命令时,如需指定{{ACS::CommandId}}作为内置环境参数,需确保云助手Agent不低于以下版本:
      • Linux:2.2.3.309
      • Windows:2.1.3.309
WorkingDir String /home/user

命令在ECS实例中的运行目录。长度不得超过200个字符。

默认值:

  • Linux系统实例默认在管理员(root用户)的home目录下,即/root
  • Windows系统实例默认在云助手Agent进程所在目录,例如C:\Windows\System32
Timeout Long 3600

执行命令的超时时间,单位:秒。

当因为进程原因、缺失模块、缺失云助手Agent等原因无法运行命令时,会出现超时现象。超时后,会强制终止命令进程。

默认值:60。

EnableParameter Boolean false

命令中是否包含自定义参数。

默认值:false。

RepeatMode String Once

设置命令执行的方式。取值范围:

  • Once:立即执行命令。
  • Period:定时执行命令。当该参数取值为Period时,必须同时指定Frequency参数。
  • NextRebootOnly:当实例下一次启动时,自动执行命令。
  • EveryReboot:实例每一次启动都将自动执行命令。

默认值:

  • 当不指定Frequency参数时,默认值为Once
  • 当指定Frequency参数时,无论是否已设置了该参数值,都将按照Period处理。

注意事项:

  • 您可以调用StopInvocation停止待执行的命令或定时执行的命令。
  • 当该参数取值Period或者EveryReboot时,您可以调用DescribeInvocationResults,然后指定IncludeHistory=true查看命令定时执行的历史记录。
Timed Boolean true 说明 该参数已废弃,传入该参数不会生效。
Frequency String 0 */20 * * * ?

定时执行命令的执行时间。目前支持三种定时执行方式:固定时间间隔执行(基于Rate表达式)、仅在指定时间执行一次、基于时钟定时执行(基于Cron表达式)。

  • 固定时间间隔执行:基于Rate表达式,按照设置的时间间隔执行命令。时间间隔支持按秒(s) 、分钟(m) 、小时(h)和天(d)来选择,适用于在固定时间间隔执行任务的场景。格式为rate(),如5分钟执行一次,格式为rate(5m)。使用固定时间间隔执行有以下限制:
    • 设置的时间间隔不大于7天、不小于60秒,且需大于定时任务的超时时间。
    • 执行间隔只基于固定频率,与任务实际执行需要的时间无关。例如设置每5分钟执行一次命令,任务需要2分钟执行完成,则在任务完成3分钟后继续执行下一轮。
    • 创建任务时不会立即执行。例如设置每5分钟执行一次命令,创建任务时不会立即执行一次命令,而是在任务创建完成后的5分钟后开始执行。
  • 仅在指定时间执行一次:按照设置的时区和执行时间点执行一次命令。格式为at(yyyy-MM-dd HH:mm:ss ),即at(年-月-日 时:分:秒 )。如果不指定时区,默认为UTC时区。时区支持以下三种形式:
    • 时区全称: 如Asia/Shanghai(中国/上海时间)、America/Los_Angeles(美国/洛杉矶时间)等。
    • 时区相对于格林威治时间的偏移量: 如GMT+8:00(东八区)、GMT-7:00(西七区)等。使用GMT格式时,小时位不支持添加前导零。
    • 时区缩写: 仅支持UTC(协调世界时间)。

      如果指定在中国/上海时间2022年06月06日13时15分30秒执行一次,格式为:at(2022-06-06 13:15:30 Asia/Shanghai);如果指定在西七区2022年06月06日13时15分30秒执行一次,格式为:at(2022-06-06 13:15:30 GMT-7:00)

  • 基于时钟定时执行(基于Cron表达式):基于Cron表达式,按照设置的定时任务执行命令。格式为 ,即 。在指定的时区下,根据Cron表达式推算定时任务执行时间并执行。若不指定时区,默认为执行定时任务实例的系统内部时区。关于Cron表达式的更多信息,请参见Cron表达式。时区支持以下三种形式:
    • 时区全称: 如Asia/Shanghai(中国/上海时间)、America/Los_Angeles(美国/洛杉矶时间)等。
    • 时区相对于格林威治时间的偏移量: 如GMT+8:00(东八区)、GMT-7:00(西七区)等。使用GMT格式时,小时位不支持添加前导零。
    • 时区缩写: 仅支持UTC(协调世界时间)。

      例如,在中国/上海时间,2022年每天上午10:15执行一次命令,格式为0 15 10 ? * * 2022 Asia/Shanghai;在东八区时间,2022年每天上午10:00到11:30每隔半小时执行,格式为0 0/30 10-11 * * ? 2022 GMT+8:00;在UTC时间,从2022年开始,每隔两年的10月每天下午14:00到下午14:55时间段内每隔5分钟执行,格式为0 0/5 14 * 10 ? 2022/2 UTC

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

Parameters Map {“name”:”Jack”, “accessKey”:”LTAIdyvdIqaRY****”}

命令中包含自定义参数时,执行命令时传入的自定义参数的键值对。例如,命令内容为echo {{name}},则可以通过Parameter参数传入键值对{"name":"Jack"}。自定义参数将自动替换变量值name,得到一条新的命令,实际执行的是echo Jack

自定义参数的个数范围为0~10,且您需要注意:

  • 键不允许为空字符串,最多支持64个字符。
  • 值允许为空字符串。
  • 自定义参数与原始命令内容在Base64编码后,若保存命令,命令内容在Base64编码后的大小不能超过18 KB;若不保存命令,命令内容在Base64编码后的大小不能超过24 KB。您可通过KeepCommand设置是否保留命令。
  • 设置的自定义参数名集合必须为创建命令时定义的参数集的子集。对于未传入的参数,您可以使用空字符串代替。

默认值为空,表示取消设置该参数从而禁用自定义参数。

KeepCommand Boolean false

执行完该命令后,是否保留下来。取值范围:

  • true:保留。可以通过InvokeCommand再次执行。会占用云助手命令的保有量配额。
  • false:不保留。执行完成后自动删除,不占用云助手命令的保有量配额。

默认值:false。

ContentEncoding String Base64

命令内容(CommandContent)的编码方式。取值范围(不区分大小写):

  • PlainText:不编码,采用明文传输。
  • Base64:Base64编码。

默认值:PlainText,乱填或错填该取值会当作PlainText处理。

Username String test

在ECS实例中执行命令的用户名称。长度不得超过255个字符。

  • Linux系统的ECS实例,默认以root用户执行命令。
  • Windows系统的ECS实例,默认以System用户执行命令。

您也可以指定实例中已存在的其他用户执行命令,以普通用户执行云助手命令更加安全。更多信息,请参见设置普通用户执行云助手命令。

WindowsPasswordName String axtSecretPassword

在Windows实例中执行命令的用户的密码名称。长度不得超过255个字符。

当您希望以非默认用户(System)在Windows实例中执行命令时,需要同时传入Username和该参数。为降低密码泄露的风险,需要将密码明文托管在运维编排服务的参数仓库中,此处仅传入密码的名称。更多信息,请参见加密参数以及设置普通用户执行云助手命令。

说明 当您使用Linux实例的root用户或Windows实例的System用户执行命令时,不需要传递该参数。

InstanceId.NStringi-bp185dy2o3o6neg****

ECS实例ID。N表示您可以同时设置多个实例ID,N的取值范围:1~50。

若指定了多台实例后,其中某台实例不满足执行条件时,您都需要重新选择。

Tag.N.Key String TestKey

命令执行的标签键。N的取值范围为1~20。一旦传入该值,则不允许为空字符串。

使用一个标签过滤资源,查询到该标签下的资源数量不能超过1000个。使用多个标签过滤资源,查询到同时绑定了多个标签的资源数量不能超过1000个。如果资源数量超过1000个,您需要使用ListTagResources接口进行查询。

最多支持64个字符,不能以aliyunacs:开头,不能包含http://https://

Tag.N.Value String TestValue

命令执行的标签值。N的取值范围为1~20。该值可以为空字符串。

最多支持128个字符,不能包含http://https://

ContainerId String ab141ddfbacfe02d9dbc25966ed971536124527097398d419a6746873fea****

容器ID。仅支持64位16进制字符串,允许存在docker://containerd://或者cri-o://前缀来明确指定的容器运行时。

注意事项:

  • 如果指定了该参数,云助手将在实例的指定容器内执行脚本。
  • 如果指定了该参数,仅支持在云助手Agent版本不低于2.2.3.344的Linux实例内运行。
  • 如果指定了该参数,已指定的Username参数和WorkingDir参数将不会生效。仅支持通过容器默认用户在容器的默认工作目录下执行命令。详细信息,请参见使用云助手在容器内执行命令。
  • 如果指定了该参数,在Linux容器中只支持执行Shell脚本,不支持在脚本开头使用类似#!/usr/bin/python命令的形式指定脚本内容的解释器。详细信息,请参见使用云助手在容器内执行命令。
ContainerName String test-container

容器名称。

注意事项:

  • 如果指定了该参数,云助手将在实例的指定容器内执行脚本。
  • 如果指定了该参数,仅支持在云助手Agent版本不低于2.2.3.344的Linux实例内运行。
  • 如果指定了该参数,已指定的Username参数和WorkingDir参数将不会生效。仅支持通过容器默认用户在容器的默认工作目录下执行命令。详细信息,请参见使用云助手在容器内执行命令。
  • 如果指定了该参数,在Linux容器中只支持执行Shell脚本,不支持在脚本开头使用类似#!/usr/bin/python命令的形式指定脚本内容的解释器。详细信息,请参见使用云助手在容器内执行命令。
ClientToken String 123e4567-e89b-12d3-a456-426655440000

保证请求幂等性。从您的客户端生成一个参数值,确保不同请求间该参数值唯一。ClientToken只支持ASCII字符,且不能超过64个字符。更多信息,请参见如何保证幂等性。

返回数据

名称

类型

示例值

描述

RequestId String 473469C7-AA6F-4DC5-B3DB-A3DC0DE3****

请求ID。

CommandId String c-7d2a745b412b4601b2d47f6a768d****

命令ID。

InvokeId String t-7d2a745b412b4601b2d47f6a768d****

命令执行ID。

示例

请求示例

http(s)://ecs.aliyuncs.com/?Action=RunCommand
&CommandContent='echo hello'
&InstanceId.1=i-bp185dy2o3o6neg****
&InstanceId.2=i-bp541dc26ko6dd5****
&Name=Test
&RegionId=cn-hangzhou
&Type=RunShellScript
&Username=test
&公共请求参数

正常返回示例

XML格式

HTTP/1.1 200 OK
Content-Type:application/xml


    E69EF3CC-94CD-42E7-8926-F133B863****
    c-7d2a745b412b4601b2d47f6a768d****
    t-7d2a745b412b4601b2d47f6a768d****

JSON格式

HTTP/1.1 200 OK
Content-Type:application/json

{
  "RequestId" : "E69EF3CC-94CD-42E7-8926-F133B863****",
  "CommandId" : "c-7d2a745b412b4601b2d47f6a768d****",
  "InvokeId" : "t-7d2a745b412b4601b2d47f6a768d****"
}

错误码

HttpCode

错误码

错误信息

描述

400 RegionId.ApiNotSupported The api is not supported in this region. 指定地域下不支持调用 API。请检查 RegionId 参数取值是否正确。
400 MissingParam.InstanceId The parameter instanceId is missing or empty. 实例ID为空。
400 NumberExceed.Tags Ensure the number of tag parameters is not greater than 20. 标签个数超过最大限制。
400 InvalidTagValue.Malformed The specified Tag.n.Value is not valid. 指定的标签值参数有误。
400 Duplicate.TagKey The Tag.N.Key contain duplicate key. 标签中存在重复的键,请保持键的唯一性。
400 InvalidTagKey.Malformed The specified Tag.n.Key is not valid. 指定的标签键参数有误。
400 MissingParameter.TagKey You must specify Tag.N.Key. 请指定标签键。
400 InvalidContainerId.Malformed The specified parameter ContainerId is not valid. 指定的容器ID不合法。
400 InvalidContainerName.Malformed The specified parameter ContainerName is not valid. 指定的容器名称不合法。
400 InvalidClientToken.Malformed The specified parameter clientToken is not valid. 指定的幂等参数不合法。
400 CmdParam.EmptyKey Command parameters can not be empty. 命令中自定义参数不能为空。
400 CmdParam.InvalidParamName A command parameter name is invalid. 命令中自定义参数名称不合法。
400 CmdContent.DecodeError The CommandContent can not be base64 decoded. 命令内容无法通过Base64解码。
400 InvalidInstance.NotMatch The specified instance type does not match the command. 指定的实例ID不支持执行指定的命令ID。请检查实例的状态是否符合云助手命令的执行条件。
400 MissingParam.Frequency The frequency must be specified when you create a timed task. 创建定时任务时必须指定频率。
400 InvalidParam.Frequency The specified frequency is invalid. 指定的 Frequency 参数无效。请检查参数值是否正确。
400 ParameterKey.Duplicate The parameter may not contain duplicate keys. 参数名称不能重复,请确认后重试。
400 Parameter.NotMatched The parameters of creation do not match those of invocation. 传入的自定义参数与创建命令时定义的自定义参数不匹配。
400 WindowsPasswordName.Missed WindowsPasswordName must be specified when you create a Windows task. 请求参数“命令类型(WindowsPasswordName)”的值未提供。
400 Parameter.Disabled Parameters should not be passed when CreateCommand.EnableParameter is false. 当您禁用命令自定义参数功能时,请不要传递自定义参数。
400 InvalidParameter.WorkingDir The specified parameter WorkingDir is not valid. 指定的参数WorkingDir不合法。
403 CmdContent.ExceedLimit The length of the command content exceeds the upper limit. 命令内容长度超过上限。
403 CmdName.ExceedLimit The length of the command name exceeds the upper limit. 命令名称长度超过上限。
403 CmdDesc.ExceedLimit The length of the command description exceeds the upper limit. 命令描述长度超过上限。
403 CmdCount.ExceedQuota The total number of commands in the current region exceeds the quota. 当前地域下的云助手命令数量已超出限制。
403 CmdParamName.ExceedLimit The length of the command parameter name exceeds the limit. 命令中自定义参数名称长度超过上限。
403 InstanceIds.ExceedLimit The number of instance IDs exceeds the upper limit. 目标实例数量超过上限。
403 Invocation.ExceedQuota The invocation quota in the current region has been reached for today. 在当前地域命令执行次数已到达今天的额度。
403 ParameterCount.ExceedLimit The number of command parameters exceeds the maximum number that can be set. 自定义参数的个数超过限制。
403 ParameterKey.ExceedLimit The length of the specified parameter key exceeds the maximum length that can be set. 指定的参数Key长度超过可设置的最大长度。
403 ParameterType.NotSupported The type of parameter value is not supported. 不支持自定义参数值的类型。
403 Username.ExceedLimit The length of the username exceeds the upper limit. 用户名长度超过上限。
403 WindowsPasswordName.ExceedLimit The length of the WindowsPasswordName exceeds the upper limit. 指定的WindowsPasswordName参数长度超过上限。
403 ParameterStore.InvalidParameters The parameter is invalid in Parameter Store. 未找到命令内容中的{{oos:?}}所指定的参数。
403 Operation.Forbidden The operation is not permitted. 该操作是不被允许的。
403 IdempotentParameterMismatch The specified parameter has changed while using an already used clientToken. 指定的客户令牌已经被使用。
403 IdempotentProcessing The previous idempotent request(s) is still processing. 先前的幂等请求仍在处理中,请稍后重试。
403 InvalidStatus.ResourceGroup You cannot perform an operation on a resource group that is being created or deleted. 资源组正在创建或删除时不允许操作。
404 InvalidCmdType.NotFound The specified command type does not exist. 指定的命令类型不存在。
404 InvalidRepeatMode.NotFound The specified repeat mode does not exist. 指定的命令执行方式不存在。
404 InvalidInstance.NotFound The specified instance does not exist. 指定的实例不存在。
404 InvalidCmdId.NotFound The specified command ID does not exist. 指定的 CommandId 参数有误,请检查参数值是否正确。您可以通过接口 DescribeCommands 查询所有可用的 CommandId。
404 InvalidResourceGroup.NotFound The ResourceGroup provided does not exist in our records. 资源组并不在记录中。
500 InternalError.Dispatch An error occurred when you dispatched the request. 发送请求时发生错误,请稍后重试。

访问错误中心查看更多错误码。

关于阿里云ecs服务器的内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/9726.html

(0)
匿名
上一篇 2023年11月17日
下一篇 2023年11月21日

相关推荐

新手站长从“心”出发,感谢16年您始终不离不弃。