2016-03-23 18 views
0

'da apache.commons.exec komutunu kullanarak parametrelerle kabuk komut dosyası yürütme Çalıştırmak için java yaklaşımı kullanılarak uygulanan apache-commons-exec komutunu kullanarak bir komut dosyası çalıştırmaya çalışıyorum. Bu betik, üretim sunucusunda (Linux) yürütülür, ancak her şeyin yolunda olduğunu görmek için yerel ana bilgisayarımda test etmem gerekir. İşte Windows

cygwin başlatmak için benim kodudur ve bu kodun cmd.exe çalışıyor ama commons.exec kullanarak uygulamayı başlatmaya çalıştığınızda çalışmıyor:

OutputStream outputStream = new ByteArrayOutputStream(); 
    DefaultExecutor exec = new DefaultExecutor(); 
    exec.setWatchdog(new ExecuteWatchdog(1000)); 
    PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream); 
    exec.setStreamHandler(streamHandler); 
    CommandLine cmdLine = CommandLine.parse("C:\\cygwin64\\bin\\bash"); 
    cmdLine.addArgument("-c"); 
    cmdLine.addArgument("/cygdrive/c/dev/launch.sh"); 
    int exit = exec.execute(cmdLine); 
    logger.warn("Job exit: " + exit); 

O döndürür 1 ve hiçbir çıkış veya günlük hatası:

org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) 

Çıkışı düzgün şekilde nasıl yakalayabilirim?

+0

... Linux ortamında test edin. Eğer bash komut dosyası bir # bang/#/bin/bash ve yapışkan uid bit chmod s + u olabilir. (Windows cygwin ortamı bash --login -i ile başlatılır) –

+0

Mümkün değil. – mannuk

cevap

0

Bu bir tahmin biraz ama yardımcı olabilir.

Bazen bir exit code = 1 "başarı" temsil eder. Ancak, Apache Commons Exec varsayılan olarak exit code = 1 hata olarak yorumlanır ve söz konusu komut dosyası exit code = 1 ile çıktığında ExecuteException atar.

exec.setExitValue(1); 

olmasa gerek nedenini ama bir go değer:

Sen DefaultExecutor Aşağıdaki kodu kullanarak "exit code = 1 = başarı" olduğunu söyleyebilirim.

+0

Her şeyi kontrol ettim ve sorunun şu olduğunu düşünüyorum: Çıkış 1 olduğunda çıkış yok (çıkışım eko ​​veya stderr görülemiyor), çıkış 0 olduğunda eczayı görebiliyorum – mannuk