Фоновый процесс на сервере Ubuntu завершается, когда последний ssh закрыт
У меня есть сервер Ubuntu 14.04, и я пытаюсь запустить Apache Karaf из ssh, выйти из ssh и ожидать, что Karaf продолжит работать. Что я на самом деле нахожу, так это то, что как только последний ssh закрывается / выходит из системы, процесс Karaf завершается.
Я запускаю Karaf с помощью команды bin / start, как описано здесь (фоновый режим), и в документации говорится, что это должно перевести Karaf в фоновый режим, однако, как показал мой опыт, этого не происходит. Как только я выйду из ssh, процесс умирает.
Я попытался использовать nohup, но снова процесс karaf всегда завершается после закрытия последнего ssh. Я не верю, что это проблема с Карафом, но какая-то конфигурация Ubuntu. Я также вижу такое же поведение на Linux Mint.
Однако Karaf ДЕЙСТВИТЕЛЬНО запускается как процесс backgorund, если я запускаю его на RaspberryPi, на котором работает Raspbian.
Существует ли конфигурация sshd, которая принудительно завершает все процессы, запущенные в ssh, после завершения ВСЕХ соединений ssh? Что бы я ни пытался, я не могу заставить фоновый процесс остаться, как только я вышел из системы.
ОБНОВЛЕНИЕ Глядя на start
скрипт, который он использует exec
:
exec "$KARAF_HOME"/bin/karaf server "$@" >> "$KARAF_REDIRECT" 2>&1 &
и, таким образом, создается другой процесс. Если я просто сделаю bin/start
дескрипторы файлов 0,1 и 2 направлены на `/dev/null'.
Если я сделаю nohup ./start 0<&- &>/dev/null &
с последующим disown
, то фд 0,1,2 из полученного процесса все идут в /dev/null
, Я заметил на RaspberryPi, что fd 0,1 и 2 все состояние /dev/pts/0 (deleted)
2 ответа
Процесс может выполняться под лидером сеанса, в этом случае оболочка, как только вы выходите из оболочки, все процессы под ней завершаются. Вот шаги, которые вам могут понадобиться, чтобы disown
процесс -
Первые два шага только для подтверждения -
- Бежать
jobs
чтобы увидеть процесс. Если это действительно было фоном, это должно быть указано здесь. fg
выведите его на передний план - вам может потребоваться указать идентификатор задания, если в фоновом режиме есть несколько заданий.ctrl+Z
- остановить процесс.bg
- фон этоdisown -h [id]
- заменить идентификатор на идентификатор работы.
Второй вариант - демонизировать процесс
nohup ./scriptname 0<&- &>/dev/null &
Попробуйте запустить это внутри сеанса экрана и посмотрите, поможет ли это.