Фоновый процесс на сервере 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 процесс -

Первые два шага только для подтверждения -

  1. Бежать jobs чтобы увидеть процесс. Если это действительно было фоном, это должно быть указано здесь.
  2. fg выведите его на передний план - вам может потребоваться указать идентификатор задания, если в фоновом режиме есть несколько заданий.
  3. ctrl+Z - остановить процесс.
  4. bg - фон это
  5. disown -h [id] - заменить идентификатор на идентификатор работы.

Второй вариант - демонизировать процесс

nohup ./scriptname 0<&- &>/dev/null &

Попробуйте запустить это внутри сеанса экрана и посмотрите, поможет ли это.

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