#shell #ubuntu #scripting
#оболочка #ubuntu #сценарии
Вопрос:
Я пытаюсь написать сценарий оболочки на Ubuntu 16.04, который будет выполнять команду на другом компьютере удаленно, а затем выполнять другие команды локально. Я пробовал это, и это не работает
#!/bin/bash
ssh username@10.200.31.131 'pkill iperf'
ssh -f username@10.200.31.131 'iperf -s'
iperf -c 10.150.91.175 >iperflog.txt
Он выполнит первые 2 команды на удаленном сервере, но я думаю, что он также пытается выполнить последнюю команду и на удаленном сервере, и я хочу выполнить последнюю на локальном сервере. Как я могу это сделать? Спасибо
Комментарии:
1. команды выполняются по одной за раз, поэтому удаленный
iperf
завершается до запуска локального. Я не думаю, что это то, чего вы хотите. Возможно, вам нужно запустить удаленныйssh
в фоновом режиме, т.Е. ` ssh -f user @ ….. ‘iperf -s’amp;` . Удачи.2. Спасибо за ваш комментарий. Я должен был упомянуть — команда ‘iperf -s’ будет запускать сервер iperf постоянно, пока он не будет остановлен
3. пожалуйста, попробуйте
ssh -f user@... 'iperf -s'amp;
. Я думаю, это решит вашу проблему. Невозможно, чтобы последний cmd (локальныйiperf
) был запущен на удаленном компьютере. Вы можете увидеть, что происходит в вашем сценарии оболочки, включив отладку / трассировку оболочки вset -vx
верхней части сценария. Безamp;
, вы увидите, что последняя команда никогда не выполняется, в то время как, если вы запустите первыйiperf
wamp;
, вы увидите выполнение последней команды. Удачи.
Ответ №1:
Возможно, ваша команда остается зарегистрированной!
Попробуйте добавить a ; /bin/bash
в конец вашей командной строки на удаленной стороне
ssh username@10.200.31.131 'pkill iperf; /bin/bash -i'
я надеюсь помочь вам