2

У меня есть длительная команда, выполняемая по SSH. Время от времени команда, кажется, зависает и перестает получать какой-либо вывод. Команда все еще выполняется на другом компьютере (фактически, если я нажимаю Ctrl+C из команды SSH, она все еще выполняется, что нормально), мой клиент просто зависает.

Моя команда выполняет цель ant , как это:

ssh -tt user@machine 'cd /thedir; export DISPLAY=:80; ant clean test'

Команда ant может занять до часа.

Я полагаю, что это плохая стратегия, так как могут возникнуть любые сетевые ошибки и испортить мое соединение. Кто-нибудь может предложить альтернативный подход? Моя цель была бы:

  1. Мой клиент ожидает завершения команды
  2. Я все еще получаю вывод от команды
  3. Если произойдет сбой в сети, я все еще могу проверить и дождаться окончания комментария

Любая помощь или предложения с благодарностью.

РЕДАКТИРОВАТЬ: я запускаю полный сценарий Bash ... Мне не нужна строчка или что-то в этом роде.

2 ответа2

2

Вы можете попробовать запустить команду в фоновом режиме (отдельно от сеанса пользователя) и отправить себе результат по электронной почте. Вроде как так:

ssh -tt user@machine 'cd /thedir; nohup ant clean test 2>&1 | mail -s "The cleanup was completed." your-email@exmaple.com'

Я не проверял это все же.

2

Я рекомендую использовать комбинацию AutoSSH и экрана. autossh автоматически переподключит SSH, если сеанс отключится, и screen позволит вашей программе работать независимо от сеанса ssh, чтобы вы могли подключиться к ней в процессе.

таким образом, когда ваша сеть икнет, autossh переподключится, и экран снова будет присоединен к вашей оболочке скриптов.

localhost>$ autossh -t remotehost 'screen -Rd'
remotehost>$ scriptname

таким образом, когда ssh умирает, autossh переподключится и автоматически подключит экранный сеанс.

http://noone.org/blog/English/Computer/Shell/Perfect%20Team:%20autossh%20and%20GNU%20Screen.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .