

# Amazon ECS 任务生命周期
<a name="task-lifecycle-explanation"></a>

如果手动启动任务或将任务作为服务的一部分启动，则任务在自行完成或被手动停止之前可能经历多种状态。一些任务旨在作为批处理作业运行，将自然地依次经历 `PENDING`、`RUNNING` 和 `STOPPED` 状态。可为服务的一部分的其他任务旨在无限期持续运行，或根据需要向上扩展和向上扩展。

当请求任务状态更改（如停止任务或更新所需服务计数以将其扩展或缩减）时，Amazon ECS 容器代理会根据任务的上一个已知状态（`lastStatus`）和任务的所需状态（`desiredStatus`）跟踪这些更改。任务的上一个已知状态和所需状态均可在控制台中或通过使用 API 或 AWS CLI 描述任务进行查看。

以下流程图显示任务生命周期流程。

![\[任务生命周期状态图。状态为 PROVISIONING、PENDING、ACTIVATING、RUNNING、DEACTIVATING、STOPPING。\]](http://docs.aws.amazon.com/zh_cn/AmazonECS/latest/developerguide/images/task-lifecycle.png)


## 生命周期状态
<a name="lifecycle-states"></a>

以下是每个任务生命周期状态的描述。

正在预置  
Amazon ECS 必须先执行其他步骤，然后再启动任务。例如，对于使用 `awsvpc` 网络模式的任务，需要预置弹性网络接口。

PENDING  
这是一个过渡状态，其中 Amazon ECS 正在等待容器代理采取进一步操作。任务一直处于待处理状态，直到有可用资源可用于该任务。

正在激活  
这种一种过渡状态，在此状态下，Amazon ECS 必须在启动任务后但在任务可以过渡到 `RUNNING` 状态之前执行其他步骤。这是 Amazon ECS 提取容器映像、创建容器、配置任务联网、注册负载均衡器目标组和配置服务发现的状态。

正在运行  
任务正在成功运行。

正在停用  
这种一种过渡状态，在此状态下，Amazon ECS 必须在任务停止前执行其他步骤。例如，对于配置为使用弹性负载均衡目标组的服务所包含的任务，将在此状态下取消注册目标组。

正在停止  
这是一个过渡状态，其中 Amazon ECS 正在等待容器代理采取进一步操作。  
对于 Linux 容器，容器代理将使用 `STOPSIGNAL` 指令发送容器映像中定义的停止信号，以通知应用程序需要完成并关闭。默认情况下，这是 `SIGTERM`。然后，在等待任务定义中设置的 `StopTimeout` 时长后，它将发送 `SIGKILL`。

正在取消预置  
Amazon ECS 必须在已停止任务后但在任务过渡到 `STOPPED` 状态之前执行其他步骤。例如，对于使用 `awsvpc` 网络模式的任务，需要分离并删除弹性网络接口。

已停止  
任务已成功停止。  
如果您的任务因某个错误而停止，请参阅 [查看 Amazon ECS 已停止任务错误](stopped-task-errors.md)。

DELETED  
这是任务停止时的过渡状态。此状态不会显示在控制台中，而是显示在 `describe-tasks` 中。