Я пытаюсь создать скрипт 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 bash:
#!/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 к терминалу.
fg использует номера заданий, а не PID:
fg: fg [job_spec]
Move job to the foreground.
Номер задания - это число в скобках ([1] в этом случае).
Вместо [ f5], используйте любой из:
fg
fg 1
. Если он должен запускаться в сценарии инициализации, вы должны использовать screen (или tmux), если вы хотите, чтобы произвольные пользователи на переднем плане.