2

Вы можете быстро перейти к вопросу, начиная читать «Сказав это»
Ниже приведены подробности о моих конкретных потребностях

Я нахожусь на lubuntu oneiric и пытаюсь создать настольный лаунчер для запуска / остановки tomcat. У меня проблемы, которые объясняются в этой теме, которую я открыл вчера на форуме lxde.

В основном, настольный лаунчер, который просто выполняет команду
/usr/local/tomcat6/bin/startup.sh
внутреннее окно lxterminal работает, но если я закрою окно lxterminal, открытое модулем запуска и выполнившим команду, то tomcat просто выключится.

Вместо этого я бы хотел закрыть это окно, продолжая работать с tomcat.
Окну нужно просто выполнить команду, чтобы запустить его, и больше ничего.

Поиск в коде whoooole, выполняемом вышеуказанной командой, в конце концов я обнаружил, что виновным является следующий код:

/opt/jdk1.6.0_22/bin/java  \
-Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ \
-Dsolr.data.dir=/home/foo/solr/data \
-Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ \
-Dsolr.data.dir=/home/foo/solr/data \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties \
-Djava.endorsed.dirs="/endorsed" \
-classpath ":/usr/local/tomcat6/bin/bootstrap.jar:/usr/local/tomcat6/bin/commons-logging-api.jar" \
-Dcatalina.base="/usr/local/tomcat6" \
-Dcatalina.home="/usr/local/tomcat6" \
-Djava.io.tmpdir="/usr/local/tomcat6/temp" \
org.apache.catalina.startup.Bootstrap "" start \
>> "/usr/local/tomcat6"/logs/catalina.out 2>&1 &

Фактически, если я запускаю эту команду в новом окне lxterminal, то же поведение замечено:
A) tomcat запускается: если я открою новый lxterminal и наберу:

$ ps aux | grep tomcat
foo     21492  0.4  1.5 934436 47248 pts/2    Sl   11:37   0:03 /opt/jdk1.6.0_22/bin/java -Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ -Dsolr.data.dir=/home/foo/solr/data -Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ -Dsolr.data.dir=/home/foo/solr/data -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties -Djava.endorsed.dirs=/endorsed -classpath :/usr/local/tomcat6/bin/bootstrap.jar:/usr/local/tomcat6/bin/commons-logging-api.jar -Dcatalina.base=/usr/local/tomcat6 -Dcatalina.home=/usr/local/tomcat6 -Djava.io.tmpdir=/usr/local/tomcat6/temp org.apache.catalina.startup.Bootstrap  start
foo     21666  0.0  0.0   4476   768 pts/4    S+   11:53   0:00 grep --color=auto tomcat

B) если я закрою первое окно lxterminal (в котором я запускал длинную команду выше), то tomcat также отключится. Если из второго окна lxterminal я снова набираю

$ ps aux | grep tomcat
foo     21694  0.0  0.0   4476   772 pts/4    S+   11:57   0:00 grep --color=auto tomcat



Было сказано, что
вышеприведенная команда looong - это просто фоновое задание: если я открою lxterminal и просто наберу

$ top &
[1] 21921

и, сохраняя это окно открытым, я открываю второе окно lxterminal и набираю

$ ps aux | grep top
foo     21921  0.0  0.0   2452   764 pts/2    T    12:07   0:00 top
foo     21927  0.0  0.0   4476   772 pts/4    S+   12:08   0:00 grep --color=auto top

Я вижу, как работает top, в то время как если я закрою первое окно, а затем снова наберу второе

$ ps aux | grep top
foo     21927  0.0  0.0   4476   772 pts/4    S+   12:08   0:00 grep --color=auto top

команда top также отключена.

Таким образом, есть ли способ запустить задание из окна lxterminal и сохранить ли это задание работающим даже после закрытия окна lxterminal, которое его запустило?

Чтобы было ясно:
Я хочу открыть окно lxterminal, которое выполняет команду (например, top &), закрыть это окно lxterminal и при этом запустить запущенную команду.

Для тех, кто читает мои данные на верхней странице:
странно то, что если я открою окно lxterminal, прямо наберу
/usr/local/tomcat6/bin/startup.sh
а затем закройте это окно .. тогда кот все еще работает. Не из панели запуска рабочего стола, которая просто открывает окно lxterminal и запускает ту же команду, а затем закрывается!

4 ответа4

2

Простое решение - экран использования. Вам может потребоваться установить его

apt-get install screen

Тогда вы можете использовать

screen your_command_here

Вы можете использовать Ctrl-AD, чтобы выйти из экрана, но продолжайте работать в фоновом режиме. Тогда вы можете использовать

screen -r 

чтобы вернуться в это окно экрана.

1

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

Если вы не хотите, чтобы это произошло, вы можете попробовать запустить процесс следующим образом:

nohup /usr/local/tomcat6/bin/startup.sh

1

В bash вы можете сказать:

my_program &
disown -h %1

http://www.gnu.org/software/bash/manual/bashref.html#Job-Control-Builtins

0

РЕШИТЬ:

Благодаря вашим ответам я наконец-то решил: проблема была в том, что я использовал интерактивную оболочку, см. Этот другой мой вопрос.
Итак, решение было:

A) Поместите в .profile то, что нужно Tomcat

export PATH=/opt/jdk1.6.0_22/bin:$PATH
export JAVA_HOME=/opt/jdk1.6.0_22
export JRE_HOME=/opt/jdk1.6.0_22
export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/home/foo/solr/solr_config/current/master/ -Dsolr.data.dir=/home/foo/solr/data"

Б) Удалите любую интерактивную оболочку и добавьте nohup и выйдите:
так что мой настольный лаунчер

[Desktop Entry]
...
Exec=lxterminal --command "bash '/home/foo/scripts/Tomcat/tomcat-startup.sh'"
...

в то время как tomcat-startup.sh в основном делает:

...
nohup bash "/usr/local/tomcat6/bin/startup.sh"
...
exit

И все просто отлично работает! :D

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .