了解命令状态 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

了解命令状态

Run Command,功能Amazon Systems Manager中,报告有关处理过程中命令经历的不同状态以及处理该命令的每个实例的详细状态信息。您可以使用以下方法监视命令状态。

  • 选择Refresh上的Run Command页面中的 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。

  • Call列表命令或者列表命令调用使用Amazon Command Line Interface(Amazon CLI)。或调用Get Command或者Get-Smand 调用,使用Amazon Tools for Windows PowerShell.

  • 配置 Amazon EventBridge 以响应状态或状态更改。

  • 将 Amazon SimSimple Notification Service (Amazon SNS) 配置为发送所有状态更改或特定状态 (例如 “失败” 或 “TimedOut”) 的通知。

Run Command 状态

Run Command 报告以下三个区域的状态详情:插件、调用和总体命令状态。A插件是在命令的 SSM 文档中定义的代码执行块。有关插件的更多信息,请参阅 Systems Manager 命令文档插件参考

在将一条命令同时发送给多个实例时,针对每个实例的命令的每个副本均为一个命令调用。例如,如果您使用AWS-RunShellScript文档并发送ifconfig命令设置为 20 个 Linux 实例,则该命令具有 20 个调用。每个命令调用都会单独报告状态。给定命令调用的插件也会单独报告状态。

最后,Run Command 包含适用于所有插件和调用的聚合命令状态。聚合命令状态可能不同于插件或调用报告的状态,如下表所述。

注意

如果您使用 max-concurrencymax-errors 参数对大量实例运行命令,则命令状态会反映这些参数施加的限制,如下表所述。有关这些参数的更多信息,请参阅 使用目标和速率控制将命令发送到队列

命令插件和调用的详细状态
状态 详细信息
Pending 该命令尚未发送到实例,或者尚未接收SSM Agent. 如果代理在经过的时间长度等于超时(秒)参数和Execution timeout (执行超时)参数,则状态将更改为Delivery Timed Out.
正在进行 Systems Manager 尝试将命令发送到实例,或者命名已收到SSM Agent并已开始在实例上运行。根据所有命令插件的结果,状态变为SuccessFailedDelivery Timed Out,或者Execution Timed Out. 例外:如果代理未在运行或未在实例上使用,则命令状态将保持为In Progress直到代理再次可用,或者直到达到执行超时限制为止。状态随后变为最终状态。
延迟 系统尝试向实例发送命令,但未成功。系统再次重试。
成功 命令由实例上的 SSM Agent接收,并返回一个为零的退出代码。此状态并不意味着命令在实例上处理。这是最终状态。
注意

要解决错误或获取有关命令执行的更多信息,请通过返回适当的退出代码 (针对命令失败的非零退出代码) 来发送一个处理错误或异常的命令。

传输超时 命令未在传输超时过期之前传输到实例。传递超时不会计入父命令的max-errors限制,但是有助于区别父命令状态是SuccessIncomplete,或者Delivery Timed Out. 这是最终状态。
执行超时 命令执行在实例上开始,但未在执行超时过期之前完成。执行超时不计入父命令的 max-errors 限制。这是最终状态。如果达到超时,Systems Manager 停止命令执行。
已失败

实例上的命令失败了。对于插件,这表示结果代码不为零。对于命令调用,这表示一个或多个插件的结果代码不为零。调用失败不计入父命令的 max-errors 限制。这是最终状态。

Canceled 命令在完成之前取消。这是最终状态。
无法传输 命令无法传输到实例。实例可能不存在或可能未响应。无法交付的调用不会计入父命令的max-errors限制,但是有助于区别父命令状态是Success或者Incomplete. 例如,如果命令中的所有调用具有状态Undeliverable,则返回的命令状态为Failed. 但是,如果一个命令有五个调用,其中四个返回状态Undeliverable,其中一个返回状态Success,则父命令的状态为Success. 这是最终状态。
已终止 父命令超过其 max-errors 限制且系统取消了后续命令调用。这是最终状态。
无效平台 命令被发送到与所选文档指定的必需平台不匹配的实例。Invalid Platform不计入父命令的最大错误数限制,但是有助于区别父命令的状态是 “成功” 还是 “失败”。例如,如果命令中的所有调用具有状态Invalid Platform,则返回的命令状态为Failed. 但是,如果一个命令有五个调用,其中四个返回状态Invalid Platform,其中一个返回状态Success,则父命令的状态为Success. 这是最终状态。
拒绝访问 这些区域有:Amazon Identity and Access Management(IAM) 用户或角色启动命令无权访问目标托管实例。Access Denied不会计入父命令的max-errors限制,但它确实有助于父命令状态是否为Success或者Failed. 例如,如果命令中的所有调用具有状态Access Denied,则返回的命令状态为Failed. 但是,如果一个命令有五个调用,其中四个返回状态Access Denied,其中一个返回状态Success,则父命令的状态为Success. 这是最终状态。
命令的详细状态
状态 详细信息
Pending 任何实例上的代理都尚未收到命令。
正在进行 命令已发送到至少一个实例,但未在所有实例上达到最终状态。
延迟 系统尝试向实例发送命令,但未成功。系统再次重试。
成功 命令由所有指定或目标实例上的 SSM Agent接收,并返回一个为零的退出代码。所有命令调用都已达到最终状态,且max-errors没有达到。此状态并不意味着命令在所有指定或目标实例上处理成功。这是最终状态。
注意

要解决错误或获取有关命令执行的更多信息,请通过返回适当的退出代码 (针对命令失败的非零退出代码) 来发送一个处理错误或异常的命令。

传输超时 命令未在传输超时过期之前传输到实例。max-errors 值或更多命令调用显示 Delivery Timed Out 状态。这是最终状态。
执行超时 命令执行在实例上开始,但未在执行超时过期之前完成。max-errors 值或更多命令调用显示 Execution Timed Out 状态。这是最终状态。
已失败

实例上的命令失败了。max-errors 值或更多命令调用显示 Failed 状态。这是最终状态。

未完成 命令尝试在所有实例上执行,且一个或多个调用没有值Success. 不过,调用失败的次数不足以使状态变为 Failed。这是最终状态。
Canceled 命令在完成之前取消。这是最终状态。
数量超出限制 作为命令目标的实例数量超出了待处理调用的账户限制。系统在实例上执行命令之前取消了命令。这是最终状态。
拒绝访问 启动命令的 IAM 用户或角色无权访问目标资源组。AccessDenied不会计入父命令的max-errors限制,但确实有助于父命令状态是否为Success或者Failed. (例如,如果命令中的所有调用具有状态AccessDenied,则返回的命令状态为Failed. 不过,如果命令具有 5 个调用,其中的 4 个调用返回状态AccessDenied,其中 1 个返回状态Success,则父命令的状态为Success。) 这是最终状态。
在标签中没有实例 命令针对的标签键对值或资源组与任何托管实例都不匹配。这是最终状态。

了解命令超时值

Systems Manager 在运行命令时强制执行以下超时值。

传输超时

在 Systems Manager 控制台中,您可以在超时(秒)字段中返回的子位置类型。发送命令后,Run Command检查命令是否已过期。如果命令达到命令过期限制(总超时),则会将状态更改为DeliveryTimedOut对于所有具有InProgressPending或者Delayed.


                    这些区域有:超时(秒)字段中的 Systems Manager 控制台中的

在更技术层面上,交付超时(超时(秒))是两个超时值的组合,如下所示:

Delivery timeout = "Timeout(seconds)" from the console + "timeoutSeconds": "{{ executionTimeout }}" from your SSM document

例如,默认值为超时(秒)在 Systems Manager 控制台中的 600 秒。如果您通过使用AWS-RunShellScriptSSM 文档,默认值“timeoutSeconds 数”: “{{执行超时}}”为 3600 秒,如以下文档示例所示:

"executionTimeout": { "type": "String", "default": "3600", "runtimeConfig": { "aws:runShellScript": { "properties": [ { "timeoutSeconds": "{{ executionTimeout }}"

这意味着命令在系统返回传输超时之前运行 4,200 秒(70 分钟)。

执行超时

在 Systems Manager 控制台中,您可以在执行超时字段(如果可用)。并非所有 SSM 文档都要求您指定执行超时值。如果已指定该值,则命令必须在此时段内完成。

注意

Run Command依赖于SSM Agent文档终端响应,以确定命令是否传递给代理。SSM Agent必须发送ExecutionTimedOut信号,用于调用或命令被标记为ExecutionTimedOut.


                    这些区域有:执行超时字段中的 Systems Manager 控制台中的

默认执行超时

如果 SSM 文档不要求您明确指定执行超时值,则 Systems Manager 会强制执行硬编码的默认执行超时。

总超时

总超时等于 delivery timeout 的值与 execution timeout 的值之和。如果execution timeout不是 SSM 文档所需的,那么total timeout的值等于delivery timeoutPlusdefault execution timeout.

Systems Manager 如何报告超时

如果 Systems Manager 收到execution timeout回复来自SSM Agent,则 Systems Manager 将命令调用标记为executionTimeout.

如果Run Command不会收到来自SSM Agent,则命令调用将标记为deliveryTimeout.

要确定目标的超时状态,SSM Agent将合并 SSM 文档的所有参数和内容来计算executionTimeout. 如果 SSM Agent 确定某条命令已超时,它会向服务发送 executionTimeout

的默认值超时(秒)的值为 3600 秒。的默认值执行超时也是 3600 秒。因此,命令的总默认超时时间为 7200 秒。

注意

SSM Agent进程executionTimeout具体取决于 SSM 文档的类型和文档版本。