как вы справляетесь с процессом ssh?

Я знаю, что вы можете приостановить ssh-сессию с помощью ~ ^ z, но есть ли способ отменить его, чтобы он продолжал работать, пока вы делаете что-то еще в локальной оболочке?

6
задан 19 May 2012 в 02:17

2 ответа

После ~ ^ z выполните bg, и остановленный процесс продолжит выполняться в фоновом режиме. Работает со всеми процессами, а не только с ssh.

P.S .: С помощью fg вы снова выводите фоновый процесс на передний план. И просто для записи: ~ необходим только для того, чтобы различить, должна ли приостановка быть на локальной машине (с ~ -> ssh-клиентом) или на сервере (без ~ -> какой-либо процесс, который в данный момент выполняется на переднем плане на сервер)

0
ответ дан 19 May 2012 в 02:17

При попытке выполнить процесс удаленно, и Вы не заботитесь о хранении ssh открытой сессии, можно хотеть посмотреть на использование screen. Это позволит Вам выполнять свой процесс в "фоне", и это будет продолжать бегать за Вами выход из системы.

Во-первых, ssh к удаленному полю, затем оттуда используйте screen и запустите свой процесс, и можно дать Ваш screen имя сессии, если Вы хотите. Вы действительно не заметите ничего различного, но запустите Ваш процесс на той сессии. Вы можете, чем выход из screen сессия при помощи команды Ctrl-a d. Это будет выглядеть примерно так:

user@remotebox:~$ screen -S foobarsession
user@remotebox:~$ startmyprocess
[detached from 4865.foobarsession]
user@remotebox:~$

Можно затем выйти из ssh сессии, и процесс будет продолжать бежать. Снова соединяться с screen сессия позже, ssh назад к удаленному полю и использованию screen -r снова соединяться. Можно использовать screen -ls перечислять сессии.

user@remotebox:~$ screen -ls
There is a screen on:
        4865.foobarsession     (10/05/2012 11:10:57 AM)     (Detached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$ screen -r foobarsession
user@remotebox:~$ screen -ls
        4865.foobarsession     (10/05/2012 11:10:57 AM)     (Attached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$

Или, если screen не установлен, Вы могли использовать nohup команда на удаленном поле. Википедия объясняет что хорошо:

Nohupping backgrounded jobs is typically used to avoid terminating them when logging
off from a remote SSH session. A different issue that often arises in this situation
is that ssh is refusing to log off ("hangs"), since it refuses to lose any data
from/to the background job(s).  This problem can also be overcome by redirecting all
three I/O streams:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &

Таким образом, Вы могли сделать что-то как:

ssh -n -f user@remotebox "sh -c 'cd /foo/bar; nohup ./myprogram > foo.out 2> foo.err < /dev/null &'"
11
ответ дан 19 May 2012 в 02:17

Другие вопросы по тегам:

Похожие вопросы: