Фоновый процесс (nohup & amp;) приостанавливается / возобновляется, когда пользователь выходит из системы / входит в систему

Ubuntu Server 11.10

Когда обычный (не root) пользователь запускает процесс с nohup (nohup java ... & amp;), когда пользователь отключается от терминала (ssh), процесс перестает отвечать , Когда пользователь снова подключается, процесс начинает отвечать снова. Например, процесс представляет собой базу данных (H2), которая перестает отвечать на запросы, когда пользователь, запустивший процесс, отключается от терминала, и начинает отвечать снова, когда пользователь снова входит в систему.

Существуют ли какие-либо разрешения фонового процесса, о которых я не знаю, которые препятствуют запуску процесса в фоновом режиме? Что может быть причиной такого поведения?

5
задан 27 October 2011 в 21:56

2 ответа

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 &'"

Или если это все еще не работает, можно попробовать 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:~$
8
ответ дан 27 October 2011 в 21:56

Процессы, запущенные с nohup ... &, предназначены для запуска даже после завершения процесса терминала. Я не думаю, что есть основной механизм Unix, который приостанавливает такие процессы. Хотя планировщик может изменить свой приоритет (потому что он может рассматриваться как не очень важный процесс).

Я почти уверен, что процесс продолжает выполняться, но что-то вроде канала блокирует его и не дает возможности ответить.

0
ответ дан 27 October 2011 в 21:56

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

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