Você pode ir rapidamente para a pergunta, começando a ler de "Tendo dito isso"
A seguir, detalhes sobre minhas necessidades específicas
Estou no lubuntu oneiric e tentando criar um iniciador de área de trabalho para iniciar / parar o tomcat.
Estou com problemas que são explicados neste tópico que abri ontem no fórum lxde.
Basicamente, o lançador de área de trabalho, que apenas executa o comando
/usr/local/tomcat6/bin/startup.sh
dentro de uma janela lxterminal funciona, mas se eu fechar a janela lxterminal aberta pelo lançador e que executou o comando .. então o tomcat é simplesmente desligado.
Em vez disso, gostaria de fechar essa janela enquanto o tomcat estivesse funcionando, é claro.
A janela precisa apenas executar o comando para iniciá-lo e nada mais.
Pesquisando dentro do código whoooole executado pelo comando acima, eu finalmente descobri que o culpado é o seguinte código:
/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 &
Na verdade, se eu executar este comando dentro de uma nova janela lxterminal, o mesmo comportamento será observado:
A) tomcat começa: se eu abrir um novo lxterminal e digitar:
$ 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) se eu fechar a primeira janela lxterminal (aquela em que corri o longo comando acima), então o tomcat também será desligado. Se, a partir da segunda janela lxterminal, eu digitar novamente
$ ps aux | grep tomcat
foo 21694 0.0 0.0 4476 772 pts/4 S+ 11:57 0:00 grep --color=auto tomcat
Tendo dito isso
o comando looong acima é apenas um trabalho em segundo plano: se eu abrir um lxterminal e simplesmente digitar
$ top &
[1] 21921
e, enquanto mantém esta janela aberta, eu abro uma segunda janela lxterminal e digito
$ 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
Eu posso ver o 'top' em execução, enquanto se eu fechar a primeira janela e depois do segundo, novamente
$ ps aux | grep top
foo 21927 0.0 0.0 4476 772 pts/4 S+ 12:08 0:00 grep --color=auto top
o comando 'top' também é desligado.
Então, existe uma maneira de iniciar um trabalho a partir de uma janela lxterminal e ter esse trabalho ainda em execução, mesmo depois de fechar a janela lxterminal que o disparou?
Para ser claro:
Eu quero abrir uma janela lxterminal que executa um comando (como top &), fechar esta janela lxterminal e ainda ter o comando executado em execução.
Para quem lê meus detalhes na primeira página:
o estranho é que, se eu abrir uma janela lxterminal, digite diretamente /usr/local/tomcat6/bin/startup.sh
e feche essa janela ... então o tomcat ainda funciona.
Não é a partir do lançador de desktop que simplesmente abre uma janela lxterminal e dispara o mesmo comando e depois fecha!