2013-05-17 39 views
0

我面對的使用問題螞蟻螞蟻EXEC任務,並檢查使用一些的ksh腳本

我想檢查一個漫長的過程結束,而無需使用一個討厭的<sleep>命令。

在我的Ant目標,我發動

<exec executable="my long process" /> 

當我手動檢查過程結束時,我用這下面的命令:

watch " "check ksh script" | grep "ONLINE" " 

當grep的返回的東西,這意味着我的過程已經結束(因爲檢查KSH腳本輸出ONLINE)

我怎麼能執行螞蟻相同的檢查?

我想使用類似以下(模擬手錶命令)

<exec executable="my long process" /> 
<waitfor maxwait="2" maxwaitunit="minute" checkevery="5" checkeveryunit="second"> 
    // do something here to check "ONLINE" 
</waitfor> 

但我不知道要放什麼東西在<waitfor>

+0

就是「長期的過程」的東西,與像0的退出值完成?如果是這樣,則在exec中使用resultproperty,並在waitfor塊中的屬性值更改時進行測試。從文檔看來,您似乎無法在執行exec之前設置屬性,然後在waitfor條件中使用「isset」測試。 – n0741337

+0

不幸的是沒有。漫長的過程要求其他幾個過程開始。我可以通過輸出「離線」或「在線」的「check ksh scrpt」來檢查他們是否在線。當調用 – facewindu

回答

0

有辦法用Ant來執行你的檢查腳本,然後測試它的輸出,但它不適合只接受一個條件的waitfor任務。

雖然你可以嘗試使用腳本。 請參閱:http://ant.apache.org/manual/Tasks/conditions.html#scriptcondition

它應該是這個樣子的是:

<scriptcondition language="javascript" value="true"> 
    var p = java.lang.Runtime.getRuntime().exec("ksh check"); 
    p.waitFor(); 
    var reader = new java.io.InputStreamReader(p.getInputStream()); 
    var out = org.apache.tools.ant.util.FileUtils.safeReadFully(reader); 
    self.setValue(out.contains("ONLINE")); 
</scriptcondition> 
+0

時你能否詳細說明爲什麼這個「不適合接受一個條件的waitfor任務」?根據文檔,內工作。似乎這種方法可以在問題的「//做些什麼」部分工作。 – n0741337

+0

'waitfor'只期待一個條件。在你的用例中,你至少需要一個exec任務和一個條件。兩者都不適合'waitfor'。 –

+0

執行您的scriptcondition給我「javax.script.ScriptException:sun.org.mozilla.javascript.internal.EcmaError:ReferenceError:」運行時「未定義。」 – facewindu