调用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,当指定该参数时:
|
Name | String | 否 | testName |
命令名称。支持全字符集,长度不得超过128个字符。 |
Description | String | 否 | testDescription |
命令描述。支持全字符集,长度不得超过512个字符。 |
Type | String | 是 | RunShellScript |
运维命令的语言类型。取值范围:
|
CommandContent | String | 是 | ZWNobyAxMjM= |
命令内容。命令内容可以是明文内容或Base64编码后的内容。您需要注意:
|
WorkingDir | String | 否 | /home/user |
命令在ECS实例中的运行目录。长度不得超过200个字符。 默认值:
|
Timeout | Long | 否 | 3600 |
执行命令的超时时间,单位:秒。 当因为进程原因、缺失模块、缺失云助手Agent等原因无法运行命令时,会出现超时现象。超时后,会强制终止命令进程。 默认值:60。 |
EnableParameter | Boolean | 否 | false |
命令中是否包含自定义参数。 默认值:false。 |
RepeatMode | String | 否 | Once |
设置命令执行的方式。取值范围:
默认值:
注意事项:
|
Timed | Boolean | 否 | true | 说明 该参数已废弃,传入该参数不会生效。 |
Frequency | String | 否 | 0 */20 * * * ? |
定时执行命令的执行时间。目前支持三种定时执行方式:固定时间间隔执行(基于Rate表达式)、仅在指定时间执行一次、基于时钟定时执行(基于Cron表达式)。
|
Parameters | Map | 否 | {“name”:”Jack”, “accessKey”:”LTAIdyvdIqaRY****”} |
命令中包含自定义参数时,执行命令时传入的自定义参数的键值对。例如,命令内容为 自定义参数的个数范围为0~10,且您需要注意:
默认值为空,表示取消设置该参数从而禁用自定义参数。 |
KeepCommand | Boolean | 否 | false |
执行完该命令后,是否保留下来。取值范围:
默认值:false。 |
ContentEncoding | String | 否 | Base64 |
命令内容(
默认值:PlainText,乱填或错填该取值会当作PlainText处理。 |
Username | String | 否 | test |
在ECS实例中执行命令的用户名称。长度不得超过255个字符。
您也可以指定实例中已存在的其他用户执行命令,以普通用户执行云助手命令更加安全。更多信息,请参见设置普通用户执行云助手命令。 |
WindowsPasswordName | String | 否 | axtSecretPassword |
在Windows实例中执行命令的用户的密码名称。长度不得超过255个字符。 当您希望以非默认用户(System)在Windows实例中执行命令时,需要同时传入 说明 当您使用Linux实例的root用户或Windows实例的System用户执行命令时,不需要传递该参数。 |
InstanceId.N | String | 是 | i-bp185dy2o3o6neg**** | ECS实例ID。N表示您可以同时设置多个实例ID,N的取值范围:1~50。 若指定了多台实例后,其中某台实例不满足执行条件时,您都需要重新选择。 |
Tag.N.Key | String | 否 | TestKey |
命令执行的标签键。N的取值范围为1~20。一旦传入该值,则不允许为空字符串。 使用一个标签过滤资源,查询到该标签下的资源数量不能超过1000个。使用多个标签过滤资源,查询到同时绑定了多个标签的资源数量不能超过1000个。如果资源数量超过1000个,您需要使用ListTagResources接口进行查询。 最多支持64个字符,不能以 |
Tag.N.Value | String | 否 | TestValue |
命令执行的标签值。N的取值范围为1~20。该值可以为空字符串。 最多支持128个字符,不能包含 |
ContainerId | String | 否 | ab141ddfbacfe02d9dbc25966ed971536124527097398d419a6746873fea**** |
容器ID。仅支持64位16进制字符串,允许存在 注意事项:
|
ContainerName | String | 否 | test-container |
容器名称。 注意事项:
|
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