В настоящее время у меня есть сценарии cron, выполняющиеся на двух машинах для выполнения задачи - могу ли я объединить их в один сценарий, который использует оба сервера? - PullRequest
0 голосов
/ 14 мая 2019

Я написал скрипт компьютерного зрения, который требует использования графического процессора, но мой основной веб-сервер не имеет графического процессора (и не может иметь его).

Таким образом, мой основной веб-серверполе A, и я купил отдельный сервер, поле B, с графическим процессором.

Рабочий процесс:

  • 1) Пользователи моегосайт загружает фотографии в блок А.

  • 2) Я обрабатываю их для обнаружения объекта на блоке В (в пакетах, поскольку код обнаружения объекта имеет медленный начальный запуск)

  • 3) И затем я сохраняю результаты в поле A.

В настоящее время у меня есть 3 сценария cron:

  • 1) блок A: скрипт создает список имен файлов самых последних необработанных 1000 файлов.

    (выполняется каждые 5 минут и обычно занимает секунду.)

  • 2) блок B: с помощью rsync скрипт извлекает список имен файлов из блока A, затем извлекает все файлы в списке, запускает обнаружение объектов Yolo в списке изображений и сохраняет результатults to results.txt

    (выполняется каждые 5 минут, 1 минута после сценария 1 и обычно занимает 2 минуты.)

  • 3) блок A: подключается другой сценарийв поле B, получает results.txt и обрабатывает их.Изображения помечаются как обработанные, поэтому при следующем запуске сценария (1) он больше не выполняет те же файлы.

    (Это выполняется каждые 5 минут, за 1 минуту до сценария 1 и обычно занимает несколько секунд.)

Что бы я хотел:

Теоретически, я чувствую, что мог бы выполнить все это из одного сценария на коробке А,который был бы чище и проще.Я обеспокоен тем, что произойдет, когда один из сценариев будет отложен.Я мог бы написать логику, чтобы добавить некоторые проверки (например, touch script2_completed), но я думаю, что я должен объединить всю логику в один скрипт, который выполняет код на обоих серверах.

Мое невежество:

Я никогда раньше этого не делал, и понятия не имею, как лучше всего это сделать, и что возможно / невозможно.

Например,если я начну запускать сценарий обнаружения удаленного объекта в блоке 2, будет ли сценарий, запущенный в блоке 1, дождаться завершения, прежде чем перейдет к следующей команде, или он окажется асинхронным, что нежелательно?

Большое спасибо!

1 Ответ

1 голос
/ 16 мая 2019

Оказывается, это смехотворно просто.

Чтобы выполнить скрипт на удаленном компьютере с локального компьютера, достаточно просто

ssh user@serverIP sh /run/this/script.sh

И, как сказал @Aaron в комментарии выше, это выполняется как запрос на блокировку, поэтому ваш локальный сценарий не будет возобновлен, пока этот удаленный сценарий не завершится.

...