Bir toplu iş dosyası çalıştırdıktan sonra konsolu nasıl açık tutabilirim?


2

Apache Tomcat startup.bat dosyasını manuel olarak çalıştırdığımda cmd konsolu açık kalıyor, aynısını java kodunda çalıştırdığımda konsol kapanıyor. (Projemdeki bazı işlemleri otomatikleştirmeye çalışıyorum). Windows için Tomcat bir uygulama olarak çalıştırıldığında, konsolun .bat çalıştırıldıktan sonra açık kalması gerekir.

Java kodum için bunu nasıl yapabilirim? Teşekkürler


1
cmd /k batchfilecmd'yi açık bırakacaksınız, ancak bu muhtemelen istediğiniz şey değil . Yolun / çalışan dizinin başlangıçta başarısız olmasına neden olduğu (toplu komutlarda komutları yürütemediği için) bir sorun olduğunu tahmin ediyorum. Ayrıca, özel sorununuzu daha iyi açıklamak için başlığı değiştirmenizi öneririm
wmz

'elle' ne demek istediğinizi detaylandırabilir misiniz? Bu toplu iş dosyasını tam olarak nasıl çalıştırıyorsunuz?
wmz

Yanıtlar:


1

Startup.batiki env değişkenine bağlıdır: CATALINA_HOME ve JRE_HOME (veya JAVA_HOME).
JRE_HOME veya JAVA_HOME setine sahip olmanız gerekir, aksi takdirde çift tıklayarak başlatmayı çalıştıramazsınız.
Bu bizi CATALINA_HOME ile bırakır. Başlangıç ​​betiği ayarlanmadıysa tahmin etmeye çalışacaktır, ancak bu yalnızca geçerli dizinden (veya kesin olması için) çalıştırıldığında çalışır. Başka bir dizinden çalıştırmayı denerseniz ve CATALINA_HOME ayarlanmadığında başarısız olur (bunun hakkında bir mesajla).
Sorununuz buysa, cmd penceresinin en üstünde benzer bir mesaj görmelisiniz:

CATALINA_HOME ortam değişkeni doğru tanımlanmadı Bu ortam değişkeni bu programı çalıştırmak için gereklidir

Karşılaşabileceğiniz başka bir sorun, yolunuz boşluk içerdiğinde ortaya çıkar. Sizinki görünmüyor, ama yine de başkalarına faydalı olabilir, bu yüzden bu bilgiyi ekleyeceğim.
Komutunuz boşluk içerdiğinde komutunuzu vermeniz gerekir start, değil mi? Bu yapmalı: "cmd.exe /c start \"my path to tomcat bin/startup.bat\""
Yanlış. Tomcat bin / startup.bat 'a giden yolum başlıklı komut penceresinde göze çarpıyorsunuz
start , ilk alıntıyı başlık olarak alıyor ... ne kadar hoş. Doğru form:
"cmd.exe /c start \"\" \"my path to tomcat bin/startup.bat\""

Fakat bekle

bu sorunların her ikisi de Tomcat penceresinin görünmesini durduracak - kapandığını söylüyorsunuz , böylece başlıyor ve sonra ölüyor. Hmm ... bu büyük olasılıkla 8080 numaralı bağlantı noktasını dinleyen bir işlem zaten var . Belki Java IDE'niz Tomcat’i başlatır? Veya 8080’de dinleyen başka bir sunucu mu başlatıyor? Sebep buysa, Tomcat günlüğünde benzer bir satır görmelisiniz (depolanırlar CATALINA_HOME/logs):

java.net.BindException: Adres zaten kullanımda: JVM_Bind

Bu sizin sorununuzsa, ilk örneği durdurmanız veya sunucu işlemlerinizi her birinin farklı bağlantı noktalarında dinleyeceği şekilde yeniden yapılandırmanız gerekebilir.

Not: Tomcat'ı java'dan başlatmak için aşağıdakileri kullandım, benim için iyi çalışıyor:

    Runtime r=Runtime.getRuntime();
    r.exec("cmd.exe /c start startup.bat",          //path to executable
            null,                                   // env vars, null means pass parent env
            new File("my path to tomcat/bin")); // working directory 

Bunu bilmek hoşuma gidiyor, cevabını kabul edebilir misiniz (oylama oklarının yanındaki onay işareti)?
Wmz

0

.Bat dosyasının dosya özelliklerini kontrol edin (üzerine sağ tıklayın), konsolu açık tutma seçeneği olmalı. Hatırladığım kadarıyla son sekme.


Yanıtlarınız için teşekkürler, @wmz Denedim ve işe yaramadı; @kenorb bu seçeneği kullanamadı, Windows 7'yi kullanıyordu
Öğrenci

@ wmz Ben sadece startup.bat üzerinde çift tıklayarak demek. String komutunu koyduğumda = "cmd / C start C: /Users/~/startup.bat" (~ dosya yolunun geri kalanıdır) java'da çalışır, ancak konsol daha sonra kapanır. Tomcat sunucusunun çalışmaya devam etmesi için açık kalmam gerekiyor. Daha önce net olmadığım için üzgünüm.
Öğrenci

@ Öğrenci Benim adımı eklemiş olsanız bile, bu yazıdaki yorumlardan haberdar değilim ... Her neyse, sizin için bir cevap gönderdim
wmz

0

tomcat/binKlasörüne git . Edit startup.batdosyası ve diyor sondan bir satırı dışında Açıklama

call "%EXECUTABLE%" run >..\logs\OutputFile.log 2>&1 start %CMD_LINE_ARGS% run >..\logs\OutputFile.log 2>&1

REMBaşlangıçta kullanarak yorumlayın.

rem call "%EXECUTABLE%" run >..\logs\OutputFile.log 2>&1 start %CMD_LINE_ARGS% run >..\logs\OutputFile.log 2>&1 

daha sonra Konsol açık kalacaktır. Bu satır yorumlanırsa, konsolu kapatıp çıktıyı bazı harici günlük dosyalarına yazmak anlamına gelir.


Son cümlenin doğru olduğuna emin misin? Ve tam tersini belirten değil mi?
zx485
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.