Как вы справляетесь с процессом 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-клиентом) или на сервере (без ~ -> какой-либо процесс, который в данный момент выполняется на переднем плане на сервер)