как вы работаете с процессом ssh?

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

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

18 ответов

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

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

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

7
ответ дан 25 July 2018 в 18:51

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

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

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

7
ответ дан 31 July 2018 в 11: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 &'"
10
ответ дан 31 July 2018 в 12:17

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

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

7
ответ дан 31 July 2018 в 12: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 &'"
10
ответ дан 2 August 2018 в 01:00

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

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

7
ответ дан 2 August 2018 в 01:00

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

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

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

7
ответ дан 4 August 2018 в 16:30

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

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

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

7
ответ дан 6 August 2018 в 01:10

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

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

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

7
ответ дан 7 August 2018 в 18:36

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

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

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

7
ответ дан 10 August 2018 в 07:16

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

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

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

7
ответ дан 15 August 2018 в 19:17
  • 1
    Теоретически это должно работать, но иногда я просто не могу понять его. Он пытается, а затем останавливает (приостанавливает) процесс ssh. – dan 19 May 2012 в 04:03
  • 2
    И когда я восстанавливаю процесс ssh, он говорит «tcsetattr: Прерванный системный вызов & quot; – dan 19 May 2012 в 04:03

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

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