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

Ubuntu Server 11.10

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

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

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:~$

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

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

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