Назад | Перейти на главную страницу

Синхронизация процессов на двух серверах

У меня есть разные процессы, которые нужно запускать последовательно, но они находятся на двух разных серверах. Вкратце, вот что я хочу сделать: 1. Запустить процесс 1 на сервере A 2. Запустить процесс 2 на сервере B 3. Запустить процесс 3 на сервере A

Но второй процесс не может начаться, пока не завершится первый.

Два сервера имеют подключение по SSH. Я хочу запустить глобальный процесс с помощью cron. Но я не хочу запускать каждый из них с crontab и долго ждать между ними, просто чтобы убедиться, что первый выполнен перед запуском второго. По-другому, как я могу заставить процесс запускаться на удаленном сервере из локального сценария, ожидая завершения удаленного сценария, прежде чем перейти к следующей строке?

Это обычная особенность программного обеспечения для рабочих процессов.

Я полагаю, вы можете свернуть свой собственный, но вам придется учитывать, что делать, если второй хост недоступен, что делать, если начальное задание cron все еще выполняется, когда наступает следующий интервал, и т.д. t слишком долго, прежде чем вам понадобится управление потоком, ветвление и другая логика, когда одна часть процесса, состоящего из нескольких частей или нескольких хостов, выходит из строя.

Самый очевидный ответ без манжета (и, вероятно, полный собственных ошибок) - добавить запуск второго этапа с помощью команды ssh, добавленной к исходной задаче cron.

Вам, вероятно, придется настроить ssh-ключи между хостами, чтобы разрешить автоматический вход с исходного хоста.

Второй вариант - каким-то образом передавать информацию о статусе между хостами, например файл флага на исходном хосте, периодически собираемый вторым, и т. Д. Я обычно считаю это менее желательным, поскольку он связан с опросом, но не похоже, что вы здесь нужно решение корпоративного уровня, иначе оно будет размещено на serverfault.

Вы можете захотеть что-то вроде RPC, где каждая машина просто сообщает другой, что она выполнила одну задачу и должна быть запущена следующая. У вас также может быть основной сценарий на одной машине, содержащий части, которые запускают команды на другой машине, как бы «встроенные». ssh будет запускать команды на удаленных машинах; в простейшем виде:

ssh <host> <command>