

# 进程守护程序自动修复
<a name="managed-daemons-auto-repair"></a>

进程守护程序对于实例的运行状况可能关键或不关键。在创建或更新进程守护程序时，可以使用 `critical` 参数来控制此设置。`critical` 参数的默认值为 `true`，因此除非您将 `critical` 设置为 `false`，否则该进程守护程序将被视为关键进程守护程序。

对于关键进程守护程序，如果进程守护程序任务停止或运行不正常，Amazon ECS 会将该实例视为受损，并自动将其耗尽并进行替换。关键进程守护程序的自动修复操作如下：

1. Amazon ECS 检测进程守护程序任务何时停止或运行状况不佳。

1. Amazon ECS 将该实例标记为耗尽，这会阻止它接受新的应用程序任务。

1. Amazon ECS 预置替换实例，并在其上启动进程守护程序任务。

1. 进程守护程序任务达到正常运行状态后，Amazon ECS 会将应用程序任务从耗尽的实例调度到替换实例上。

1. Amazon ECS 终止原始实例。

对于非关键进程守护程序，进程守护程序任务的运行与容器实例的运行状况无关。如果进程守护程序任务失败、停止或运行不正常，Amazon ECS 会使容器实例保持活动状态。非关键进程守护程序永远不会阻止实例注册，因此即使进程守护程序启动失败，也可以立即放置应用程序任务。

**重要**  
进程守护程序运行状况检查是可选的，但强烈推荐进行此检查。如果没有运行状况检查，Amazon ECS 只能在进程守护程序任务停止时检测故障。

您可以使用 `DescribeContainerInstances` API 或 `DescribeTasks` API 监控进程守护程序的运行状况。

对于非关键进程守护程序，Amazon ECS 会在进程守护程序任务未运行时使实例保持活动状态。以下字段会报告处于该状态的实例数量：
+ `DescribeDaemon` 将返回每个容量提供程序的 `withoutDaemonCount`，并为所有容量提供程序返回该修订的 `totalWithoutDaemonCount`。
+ `DescribeDaemonDeployments` 将返回每个容量提供程序的 `withoutDaemonInstanceCount`，并为所有容量提供程序返回该修订的 `totalWithoutDaemonInstanceCount`。

**注意**  
不含进程守护程序的计数与正在运行的计数相互独立。`DescribeDaemon` 会报告 `runningCount` 和 `totalRunningCount`。`DescribeDaemonDeployments` 会报告 `runningInstanceCount` 和 `totalRunningInstanceCount`。一个实例只会出现在其中一组计数，绝不会同时出现这两组计数，因此请勿将这两组的值相加。