Каков наилучший способ выполнить удаленную команду SSH в фоновом режиме, но по-прежнему отображается?

Мне нужно запускать команды SSH удаленно, вывод выводится локально. Но если соединение разрывается, я хочу, чтобы команда все еще выполнялась.

Я не столько говорю о входе в систему и выполнении, но о ssh user@remotehost 'команды && команда и т. Д.'

Как я могу обеспечить выполнение команды, даже если разрывается соединение?

5 ответов

Решение

Лучший способ сделать это - использовать экран, который сохраняет сеанс открытым постоянно, даже если соединение разорвано (и если вы хотите начать использовать его снова, вы можете сделать screen -r и это откроет это снова).

Префикс любой команды, которую вы хотите запустить screen (например. ssh -t user@host screen command) должен сделать работу.

Если вы хотите, чтобы он работал в фоновом режиме оболочки, вы также можете добавить & на все это.

Вы хотите иметь постоянный сеанс, который можно возобновить, или просто чтобы отключить соединение от прекращения действия исключения?

Для первого используйте screenдля последнего nohup,

Как упоминалось ранее, screen может сделать весь трюк. Но не только то, что вам нужно. Я использую screen на протяжении многих лет, и теперь использую его каждый раз, когда захожу в систему. Попробуй установить screen и создать ~/.screenrc с таким конфигом:

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1`  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

Тогда беги screen -Rd vcf, Это предпочтительный вызов экрана. Вы переподключитесь к ранее созданному сеансу с именем vcf* (или получите предупреждение, если он неоднозначный) или, если сеанс еще не открыт, он будет создан. CTRL+A - это мета-ключ, который делает все. CTRL+A C (CTRL+A, затем C) создать новое окно (экран) внутри сессии. CTRL+A SPACE переместить фокус на следующее окно в раунде.CTRL+A D отключить текущий сеанс, сохраняя все окна работоспособными между соединениями. Если у вас есть запуск какого-то более долгого задания, вы можете отсоединиться от экрана и подключиться к нему позже, чтобы посмотреть, что произойдет. То же самое происходит, если ваш ssh-сеанс потерян - экран остается активным со всеми открытыми окнами и всеми запущенными задачами.

Если вы хотите закрыть окно внутри экрана - просто exit из скорлупы в нем. Если вы хотите закрыть все оболочки / задачи во всех окнах и выйти из экрана - просто нажмите CTRL+A CTRL+\ и нажмите "Y", когда спросят.

Для всего остального смотрите man screen.

Я видел эту альтернативу надежному ssh "like" соединению:

http://mosh.mit.edu/

Я бы обычно делал:

nohup mycommand &

tail -f nohup.out
Другие вопросы по тегам