bash с sh сломанная труба 22 команда повтора - PullRequest
0 голосов
/ 20 марта 2020

У меня есть программа, в которой я sh обращаюсь к нескольким виртуальным машинам и выполняю сценарий параллельно с каждой виртуальной машины, пока они не будут завершены. Команда выглядит следующим образом:

nohup ssh -T username@VM1 << EOF1 &
cd ${path1}
nohup bash ${path1}/script1.sh &
EOF1
nohup ssh -T username@VM2 << EOF2 &
cd ${path1}
nohup bash ${path1}/script2.sh &
EOF2
wait
echo "done"

В настоящее время с помощью этой программы она будет sh подключаться к VM1 и запускать script1. sh, одновременно с sh - VM2 и запускать script2. sh. Однако иногда возникает ошибка:

Connection closed by xxx.xx.xx.x port 22

Эта ошибка очень спорадиальная c, не показывает никаких признаков паттерна и может происходить несколько раз подряд (чаще всего я видел 3, но не означает, что 4 или 5 невозможны). Я * sh для каждой отдельной виртуальной машины запускаю интенсивные программы, которые требуют много оперативной памяти, поэтому запуск всего на одной виртуальной машине невозможен при строгих временных ограничениях.

Проблема в том, что существуют последующие программы, которые полагаются на выходные данные этих двух команд, и, если эти команды не выполняют sh должным образом, они не могут запустить сценарии, а последующие процессы приводят к нежелательным ошибкам. Таким образом, есть ли способ перезапустить команду, если s sh выдает проблему с портом 22? Я знаю, что есть команда «до», но не могу заставить ее работать должным образом с другими аргументами командной строки, которые я передал.

...