本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
任务流
下面显示了任务工作流程中的不同步骤,从启动新任务到报告任务执行的完成状态。
开始新任务
创建新任务后,J AWS IoT obs 会为每台目标设备发布一条有关该$aws/things/
主题的消息。thing-name
/jobs/notify
消息包含以下信息:
{ "timestamp":1476214217017, "jobs":{ "QUEUED":[{ "jobId":"0001", "queuedAt":1476214216981, "lastUpdatedAt":1476214216981, "versionNumber" : 1 }] } }
在对任务执行进行排队时,设备将在 '$aws/things/
主题上收到此消息。thingName
/jobs/notify'
注意
对于具有可选 SchedulingConfig
的任务,该任务将保持初始状态 SCHEDULED
。当任务达到所选的 startTime
时,将发生以下情况:
-
任务状态将更新为
IN_PROGRESS
。 -
任务将开始向目标组中的所有设备推出任务文档。
获取任务信息
要获取有关任务执行的更多信息,请调用 DescribeJobExecution MQTT API 并将 includeJobDocument
字段设置为 true
(默认值)。
如果请求成功, AWS IoT 作业服务将发布一条有关该$aws/things/MyThing/jobs/0023/get/accepted
主题的消息:
{ "clientToken" : "client-001", "timestamp" : 1489097434407, "execution" : { "approximateSecondsBeforeTimedOut": number, "jobId" : "023", "status" : "QUEUED", "queuedAt" : 1489097374841, "lastUpdatedAt" : 1489097374841, "versionNumber" : 1, "jobDocument" : { < contents of job document > } } }
如果请求失败, AWS IoT 作业服务将发布一条有关该$aws/things/MyThing/jobs/0023/get/rejected
主题的消息。
设备现在已有任务文档,它可使用该文档执行任务的远程操作。如果任务文档包含一个 Amazon S3 预签名 URL,则设备可使用该 URL 下载任务的任何所需文件。
报告任务执行状态
当设备执行任务时,它可调用 UpdateJobExecution MQTT API 来更新任务执行的状态。
例如,设备可通过在 IN_PROGRESS
主题上发布以下消息来将任务执行状态更新为 $aws/things/MyThing/jobs/0023/update
:
{ "status":"IN_PROGRESS", "statusDetails": { "progress":"50%" }, "expectedVersion":"1", "clientToken":"client001" }
Jobs 通过将消息发布到 $aws/things/MyThing/jobs/0023/update/accepted
或 $aws/things/MyThing/jobs/0023/update/rejected
主题来进行响应:
{ "clientToken":"client001", "timestamp":1476289222841 }
设备可通过调用 StartNextPendingJobExecution 来合并两个以前的请求。这将获取并开始下一个待处理任务执行,并允许设备更新任务执行状态。此请求还在有待处理任务执行时返回任务文档。
如果作业包含 TimeoutConfig,则正在进行的计时器开始运行。您还可以通过设置调用时的值来为任务执行设置步进计stepTimeoutInMinutes
时器UpdateJobExecution。步骤计时器仅应用于您更新的任务执行。您每次更新任务执行时,可以为此计时器设置新值。您也可以在呼叫时创建计步器StartNextPendingJobExecution。如果任务执行保持在 IN_PROGRESS
状态的时间长度超过了此步骤计时器间隔,它将失败,并切换为最终 TIMED_OUT
状态。步骤计时器对您在创建任务时设置的进行中计时器没有任何影响。
status
字段可设置为 IN_PROGRESS
、SUCCEEDED
或 FAILED
。您无法更新已处于最终状态的任务执行的状态。
报告执行已完成
在设备执行完任务后,它将调用 UpdateJobExecution MQTT API。如果任务已成功,则将 status
设置为 SUCCEEDED
,并在消息负载的 statusDetails
中,将有关任务的其它信息作为名称-值对添加。任务执行完成时,进行中计时器和步骤计时器结束。
例如:
{ "status":"SUCCEEDED", "statusDetails": { "progress":"100%" }, "expectedVersion":"2", "clientToken":"client-001" }
如果任务未成功,则将 status
设置为 FAILED
,并在 statusDetails
中,添加有关出现的错误的信息:
{ "status":"FAILED", "statusDetails": { "errorCode":"101", "errorMsg":"Unable to install update" }, "expectedVersion":"2", "clientToken":"client-001" }
注意
statusDetails
属性可包含任意数量的名称-值对。
当 AWS IoT Jobs 服务收到此更新时,它会发布一条有关该$aws/things/MyThing/jobs/notify
主题的消息,表示任务执行已完成:
{ "timestamp":1476290692776, "jobs":{} }
其它任务
如果设备有其它待处理的任务执行,这些任务执行将包含在发布到 $aws/things/MyThing/jobs/notify
的消息中。
例如:
{ "timestamp":1476290692776, "jobs":{ "QUEUED":[{ "jobId":"0002", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }], "IN_PROGRESS":[{ "jobId":"0003", "queuedAt":1476290646230, "lastUpdatedAt":1476290646230 }] } }