Мне нужно запускать команды SSH удаленно с локальным отображением вывода. Но если соединение прерывается, я хочу, чтобы команда продолжала работать.
Я не говорю так много о входе в систему и выполнении, а о выполнении команд ssh user @ remotehost '&& command и т. Д.'
Как обеспечить выполнение команды даже при разрыве соединения?
Наилучший способ сделать это - использовать screen, который постоянно держит сеанс открытым, даже если соединение прерывается (и если вы хотите начать использовать его снова, вы можете сделать 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+А это мета-ключ, который делает все. CTRL+A C
(CTRL+А, затем C) создать новое окно (экран) внутри сеанса. CTRL+A SPACE
переместить фокус в следующее окно в раунде.CTRL+A D
отсоединить текущий сеанс, сохраняя работоспособность всех окон между подключениями. Если вы запустили какую-то длинную задачу, вы можете отсоединиться от экрана и снова подключиться к ней позже, чтобы посмотреть, что произойдет. То же самое происходит, если ваш сеанс ssh потерян - экран остается живым со всеми открытыми окнами и всеми запущенными задачами.
Если вы хотите закрыть какое-то окно внутри экрана - просто exit
из ракушки в нем. Если вы хотите закрыть все оболочки / задачи во всех окнах и выйти из экрана - просто нажмите CTRL+A CTRL+\
и нажмите «Y», когда его спросят.
Все остальное см. На экране человека.
Я видел эту альтернативу надежному ssh-соединению типа "лайк":
Обычно я делал:
nohup mycommand &
tail -f nohup.out