Назад | Перейти на главную страницу

Как лучше всего запустить удаленную команду ssh в фоновом режиме, но по-прежнему отображать?

Мне нужно запускать команды 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-соединению типа "лайк":

http://mosh.mit.edu/

Обычно я делал:

nohup mycommand &

tail -f nohup.out