Bash'taki arka plan işi, pencere açılırken kapanıyor: nasıl önlenebilir?


2

'Okumadan başlayan soruya hızlı bir şekilde gidebilirsiniz' demiştim '
Aşağıdakiler özel ihtiyaçlarıma ilişkin detaylar.

Ben oneiric lubuntu üzerinde ve tomcat başlatmak / durdurmak için bir masaüstü başlatıcısı oluşturmaya çalışıyorum. Dün açtığım bu konu ile ilgili sorunların yaşandığını lxde forumunda yaşıyorum.

Temel olarak sadece
/usr/local/tomcat6/bin/startup.sh
bir lxterminal penceresinin içindeki komutu çalıştıran masaüstü başlatıcısı çalışır, ancak eğer başlatıcının açtığı ve komutu uygulayan lxterminal penceresini kapatırsam, o zaman tomcat kapanır.

Tabii ki, Tomcat'ı elbette koşmaya devam ederken bu pencereyi kapatmak istiyorum.
Pencerenin sadece onu başlatmak için komutu yerine getirmesi gerekiyor, başka bir şey yok.

Yukarıdaki komutla çalıştırılan whoooole kodunun içinde arama yapmak sonunda suçluların şu kod olduğunu buldum:

/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 &

Aslında, bu komutu yeni bir lxterminal penceresinde çalıştırırsam, aynı davranış fark edilir:
A) tomcat başlar: eğer yeni bir lxterminal açarsam ve şunu yazarsam:

$ 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) ilk lxterminal penceresini kapattığımda (yukarıdaki uzun komutu koyduğum pencereyi) kapattıktan sonra tomcat da kapanıyor. İkinci lxterminal penceresinden tekrar yazarsam

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



Söyledikten
yukarıda looong komutu sadece arka plan işidir: Bir lxterminal açıp basitçe yazarsanız

$ top &
[1] 21921

ve, bu pencereyi açık tutarken, ikinci bir lxterminal pencereyi ve türünü açarım.

$ 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

İlk pencereyi kapatıp sonra ikinci pencereden tekrar kapatmam durumunda 'top' çalıştığını görebiliyorum

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

'top' komutu da kapatılır.

Peki işe bir lxterminal penceresinden başlamanın ve onu açan lxterminal penceresini kapattıktan sonra bile bu işi devam ettirmenin bir yolu var mı?

Açık olmak:
Bir komutu yürüten (üst ve benzeri) bir lxterminal penceresi açmak, bu lxterminal penceresini kapatmak ve hala yürütülen komutu çalıştırmak istiyorum.

Ayrıntılarımı en üst sayfada okuyanlar için:
garip olan şu ki, lxterminal bir pencere açarsam doğrudan yazın
/usr/local/tomcat6/bin/startup.sh
ve sonra o pencereyi kapatın. Sadece bir lxterminal pencere açan ve aynı komutu ateşleyen masaüstü başlatıcısından değil, ardından kapanıyor!


3
Muhtemelen istersiniz nohupveya screenişlemin etkileşimli olup olmamasına bağlı olarak ve buna geri dönmeniz gerekir.
David Schwartz

1
Sadece pencereyi kapatmak yerine koşar exitya da basarsanız CTRL+D, iş çalışmaya devam eder (arka plandan yapılırsa &).
Patrick

Yanıtlar:


2

Basit bir çözüm kullanım ekranıdır: Tarafından yüklemeniz gerekebilir

apt-get install screen

Sonra kullanabilirsiniz

screen your_command_here

Ekrandan çıkmak için Ctrl-AD kullanabilirsiniz, ancak arka planda çalışmaya devam eder. Sonra kullanabilirsiniz

screen -r 

o ekran penceresine geri dönmek için.



1

Sanırım, terminal penceresi kapalıyken (Tomcat-) işlemleriniz öldürülüyor çünkü terminal penceresinde çalışan kabuk, Tomcat işleminizin ana işlemidir. Böylece bir ebeveyn öldürüldüğünde, tüm çocuk süreçleri de öldürülür.

Bunun olmasını istemiyorsanız, işleminizi bu şekilde başlatmayı deneyebilirsiniz:

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


Bir ebeveynin öldüğü zaman bir sürecin çocukları öldürülmez. Yalnızca etkileşimli bir kabuk çıktığında, bu kabuğun altında çalışan tüm işlere bir YEDEK gönderir.
Patrick

@Patrick Tavsiyeleriniz için teşekkür ederiz! Sorun şu ki etkileşimli mermiler de kullandım.
Luca Borrione

0

ÇÖZÜLDÜ:

Cevaplarınız sayesinde nihayet çözdüm: sorun aynı zamanda benim bu diğer soruyu görmek için etkileşimli kabuk kullanmamdı .
Yani çözüm şuydu:

A) Tomcat'ın ihtiyaç duyduğu şeyleri de ekleyin.

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"

B) Herhangi bir etkileşimli kabuğu kaldırın ve nohup ekleyip çıkın:
masaüstü başlatıcımda

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

tomcat-startup.sh temelde:

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

Ve her şey sadece iyi çalışıyor! : D

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.