如何在另一台机器上获取作业 运行 的状态?
How to get status of a job running on another machine?
我有 2 台机器 A 和 B,A 可以向 B 发送 restful 请求,如下所示:
curl -XPOST -H "Content-type: application/json" -d '{"data":"python /tmp/demo.py","action":"demo"}' 'http://192.168.95.8:51888/api/host'
我在 B 上部署了一个 api 服务,当收到这样的请求时,B 将执行 python 脚本 /tmp/demo.py
,执行可能会持续 0.5-3 小时。
我的问题是:
1) 如何在 A 上编写一个作业,持续跟踪 B 上任务 运行 的状态,并在任务成功或失败时自行结束?
2) tracking job中,如何添加超过预设时间阈值后自行kill的模块?
将作业视为 HTTP 资源。当您执行 POST /api/host
时,该请求会为该作业创建一个新 ID,并 returns 它。为了更好地使用 HTTP,响应将包含 Location
header 和可以检查作业状态的资源的 URL,例如:
POST /api/hosts
Content-type: application/json
{"data":"python /tmp/demo.py","action":"demo"}
HTTP/1.1 201 Created
Location: /api/host/jobs/c2de232b-f63e-4178-a053-d3f3459ab538
您现在可以GET /api/host/jobs/c2de232b-f63e-4178-a053-d3f3459ab538
随时查看工作的状态,例如:
{"status": "pending"}
您可以 POST
命令该资源,例如取消它。
您的 HTTP API 将如何获得该 Python 脚本的状态显然取决于您。也许它可以通过套接字与其通信,或者作业本身会定期将其状态写入某个数据库或文件。
我有 2 台机器 A 和 B,A 可以向 B 发送 restful 请求,如下所示:
curl -XPOST -H "Content-type: application/json" -d '{"data":"python /tmp/demo.py","action":"demo"}' 'http://192.168.95.8:51888/api/host'
我在 B 上部署了一个 api 服务,当收到这样的请求时,B 将执行 python 脚本 /tmp/demo.py
,执行可能会持续 0.5-3 小时。
我的问题是:
1) 如何在 A 上编写一个作业,持续跟踪 B 上任务 运行 的状态,并在任务成功或失败时自行结束?
2) tracking job中,如何添加超过预设时间阈值后自行kill的模块?
将作业视为 HTTP 资源。当您执行 POST /api/host
时,该请求会为该作业创建一个新 ID,并 returns 它。为了更好地使用 HTTP,响应将包含 Location
header 和可以检查作业状态的资源的 URL,例如:
POST /api/hosts
Content-type: application/json
{"data":"python /tmp/demo.py","action":"demo"}
HTTP/1.1 201 Created
Location: /api/host/jobs/c2de232b-f63e-4178-a053-d3f3459ab538
您现在可以GET /api/host/jobs/c2de232b-f63e-4178-a053-d3f3459ab538
随时查看工作的状态,例如:
{"status": "pending"}
您可以 POST
命令该资源,例如取消它。
您的 HTTP API 将如何获得该 Python 脚本的状态显然取决于您。也许它可以通过套接字与其通信,或者作业本身会定期将其状态写入某个数据库或文件。