У меня есть разные процессы, которые нужно запускать последовательно, но они находятся на двух разных серверах. Вкратце, вот что я хочу сделать: 1. Запустить процесс 1 на сервере A 2. Запустить процесс 2 на сервере B 3. Запустить процесс 3 на сервере A
Но второй процесс не может начаться, пока не завершится первый.
Два сервера имеют подключение по SSH. Я хочу запустить глобальный процесс с помощью cron. Но я не хочу запускать каждый из них с crontab и долго ждать между ними, просто чтобы убедиться, что первый выполнен перед запуском второго. По-другому, как я могу заставить процесс запускаться на удаленном сервере из локального сценария, ожидая завершения удаленного сценария, прежде чем перейти к следующей строке?
Это обычная особенность программного обеспечения для рабочих процессов.
Я полагаю, вы можете свернуть свой собственный, но вам придется учитывать, что делать, если второй хост недоступен, что делать, если начальное задание cron все еще выполняется, когда наступает следующий интервал, и т.д. t слишком долго, прежде чем вам понадобится управление потоком, ветвление и другая логика, когда одна часть процесса, состоящего из нескольких частей или нескольких хостов, выходит из строя.
Самый очевидный ответ без манжета (и, вероятно, полный собственных ошибок) - добавить запуск второго этапа с помощью команды ssh, добавленной к исходной задаче cron.
Вам, вероятно, придется настроить ssh-ключи между хостами, чтобы разрешить автоматический вход с исходного хоста.
Второй вариант - каким-то образом передавать информацию о статусе между хостами, например файл флага на исходном хосте, периодически собираемый вторым, и т. Д. Я обычно считаю это менее желательным, поскольку он связан с опросом, но не похоже, что вы здесь нужно решение корпоративного уровня, иначе оно будет размещено на serverfault.
Вы можете захотеть что-то вроде RPC, где каждая машина просто сообщает другой, что она выполнила одну задачу и должна быть запущена следующая. У вас также может быть основной сценарий на одной машине, содержащий части, которые запускают команды на другой машине, как бы «встроенные». ssh
будет запускать команды на удаленных машинах; в простейшем виде:
ssh <host> <command>