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

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

2 ответа

Если вы пытаетесь запустить процесс удаленно, и вам не нужно держать сеанс 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 &'"

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

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

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