Как получить статус задания, запущенного на другом компьютере? - PullRequest
1 голос
/ 06 ноября 2019

У меня есть 2 машины A и B, и A может отправить повторный запрос к B следующим образом:

curl -XPOST -H "Content-type: application/json" -d '{"data":"python /tmp/demo.py","action":"demo"}' 'http://192.168.95.8:51888/api/host'

Я развернул службу API на B, и когда такой запрос получен, B выполнит Pythonсценарий /tmp/demo.py и выполнение может длиться 0,5-3 часа.

Мой вопрос:

1) Как написать задание на A, которое отслеживает состояние задания, выполняемого на Bи завершить себя, когда задача успешно завершится или не удалась?

2) Как добавить в работу отслеживания модуль, который может убить себя после превышения заданного временного порога?

1 Ответ

2 голосов
/ 06 ноября 2019

Считайте работу ресурсом HTTP. Когда вы делаете POST /api/host, этот запрос создает новый идентификатор для этой работы и возвращает его. Для правильного использования HTTP ответ должен содержать заголовок Location с 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, очевидно, зависит от вас. Возможно, он может связываться с ним через сокет, или само задание будет периодически записывать свой статус в какую-либо базу данных или файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...