Ожидать, что скрипт, вызванный из скрипта bash, не вернет управление после завершения - PullRequest
0 голосов
/ 01 июня 2019

Я вызываю ожидаемый скрипт из bash-скрипта внутри цикла для использования многопоточности. Ожидаемый сценарий выполняет вход в ssh и вызывает сценарий python с помощью команды nohup для перезапуска хоста. Но после завершения перезапуска элемент управления не возвращается в сценарий bash.

Код сценария оболочки:

for host in ${hosts[@]};
do
  ./b.exp $id $pswd $host &
done
wait
echo "Completed"

Ожидается код сценария:

set timeout -1
spawn ssh <server login>
send "nohup /loc/c.py $host\r"
send -- "exit\r"
expect eof

Я ожидаю, что после завершения перезапуска всех хостов скрипт должен вывести «Completed». Но он ничего не печатает, и мне нужно вручную завершить выполнение.

Может кто-нибудь сказать, что я здесь не так делаю?

1 Ответ

0 голосов
/ 01 июня 2019

nohup не отсоединяет терминал, вы хотите отправить

 nohup /loc/c.py $host &

, где & для запуска задания в фоновом режиме является значительным изменением.

(Собственно говоря, $host также следует заключать в кавычки, но если вы уверены, что он содержит один токен без пробелов или подстановочных знаков, это не должно иметь значения. Аналогично "${hosts[@]}" должно иметь двойные кавычки, но опять же, под учитывая условия, это должно быть хорошо без кавычек.)

...