Каков наилучший способ выполнить удаленную команду 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" соединению: