Как я могу запустить программу Java в фоне?

Я пытаюсь сделать a init.d сценарий, который должен запустить эту команду Java:

java -cp ./:/opt/glassfish/domains/domain1/lib/*:/opt/glassfish/lib/* com.name.it.svcimpl.OrderRequestDispatcher &

С & это запускается как фоновый процесс, и это прекрасно. Проблемы запускаются, когда Вы пытаетесь получить его к переднему плану:

[1] 10119
user@server:$ fg 10119
-bash: fg: 10119: no such job

После нажатия Enter, это происходит:

[1]+  Stopped                 java -cp ./:/opt/glassfish/domains/domain1/lib/*:/opt/glassfish/lib/* name.alcar.it.svcimpl.OrderRequestDispatcher

Поскольку Вы видите, что не было никакого процесса как 10119 итак, почему это останавливается? Но вещи, становящиеся намного более трудными, когда команда находится в сценарии удара init.d:

#!/bin/bash
(cd /opt/glassfish/domains/domain1/applications/AS/WEB-INF/classes; java -cp ./:/opt/glassfish/domains/domain1/lib/*:/opt/glassfish/lib/* com.name.it.svcimpl.OrderRequestDispatcher &)

(Нужно к запущенному под путем /opt/glassfish/domains/domain1/applications/AS/WEB-INF/classes)

Теперь мой вопрос как не программист Java:

  • Действительно ли возможно запустить программу Java в фоне с опцией к переднему плану это от какого-либо терминального сеанса?

Поскольку можно читать, действительно важно выполнить его в фоне. Любой пользователь, которые зарегистрированы, должен смочь поместить его в передний план. Пользователи соединяются с SSH с терминалом.

1
задан 24 February 2016 в 19:02

2 ответа

Вы не можете передний план процесс от другой сессии. Функциональность, которую Вы хотите, вероятно, возможна с эти screen команда.

Что касается приложения Java, не удающегося работать в init.d; Вы не изменяетесь на /opt/glassfish/domains/domain1/applications/AS/WEB-INF/classes папка. Вы имеете в своем пути к классу, таким образом, имеет значение, откуда Вы работаете.

Идеально, я думаю, что необходимо сохранить сценарий удара и выполнить это от init.d. Однако Вы могли также добавить полный путь к своему init.d пути к классу явно. Хотя я подозреваю, что необходимо будет использовать screen из-за неспособности к переднему плану приложение.

экран For, это - пример того, что Вы ищете

$ screen -S myScreen -d -m ./dostuff.sh
$ screen -r myScreen
4
ответ дан 3 December 2019 в 06:25

fg числа задания использования, не PIDs:

fg: fg [job_spec]
    Move job to the foreground.

Число задания является числом в скобках ([1] в этом случае).

Вместо fg 10119, используйте любой из:

fg
fg 1

Если это должно быть выполнено в init сценарии, необходимо использовать screen (или tmux) если Вы хотите, чтобы произвольные пользователи принесли его к переднему плану.

3
ответ дан 3 December 2019 в 06:25

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

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