2010-05-11 60 views
5

我有一個shell腳本,傳遞一個的build.xml文件到遠程UNIX機器(devrsp02)和機器(devrsp02)上執行Ant任務wldeploy。現在,這個wldeploy任務大約需要15分鐘才能完成,並且在運行時,unix控制檯的最後一行是 -如何做到在UNIX Shell腳本並行處理?

「task {some digit} initialized」。

完成此任務後,我們會收到一個「任務已完成」信息,腳本中的下一個任務僅在此之後執行。

但有時候,有可能是與WebLogic域問題,部署可能會失敗的內部,與上wldeploy任務的狀態沒有影響。 UNIX的控制檯將仍處於「任務{一些數字}初始化」被卡住。該部署的錯誤將會得到記錄在一個名爲output.a

那麼文件,我現在想的 -

運行wldeploy之前啓動時間計數器。如果wldeploy超過15分鐘運行,下面的命令應運行 -

尾-f output.a ##而不終止wldeploy

貓輸出.a ##在強制終止wldeploy之後

需要注意的一點是 - 我無法在後臺運行wldeploy任務,如這種情況下,用戶不會得到知道當任務完成後,這是該腳本的關鍵。

請問你能提出一些建議嗎?

回答

3

創建這個腳本(deploy.sh爲例):從控制檯

chmod +x deploy.sh 

#!/bin/sh 
sleep 900 && pkill -n wldeploy && cat output.a & 
wldeploy 

然後再運行

./deploy.sh 

該腳本將啓動計數器(15分鐘)將強行殺死wldeploy過程中,如果它的運行,並且如果p rocess正在運行,你會看到output.a內容。

如果腳本已終止,則pkill將不會返回true,並且output.a將不會顯示。

我會叫這個任務監控,而不是「並行處理」 :)

+0

請注意不要一次運行多個deploy.sh副本,但是。 – pra 2010-05-13 12:27:49

+0

嗨,安迪。這種方法只會在900秒後終止wldeploy。這不是我想要的。感謝您的回覆。 – 2010-05-18 13:00:11

+0

Hello Bikram,這隻會終止它的運行,並且會輸出你指定的調試。 – Andy 2010-05-18 14:14:56

1

這隻會殺死wldeploy過程就開始,告訴你wldeploy是否返回成功或失敗,並運行wldeploy後不超過30秒飾面。

它應該是sh兼容的,但我現在有權訪問的/ bin/sh似乎有一箇中斷的等待命令。

#!/bin/ksh 
wldeploy & 
while [ ${slept:-0} -le 900 ]; do 
    sleep 30 && slept=`expr ${slept:-0} + 30` 
    if [ $$ = "`ps -o ppid= -p $!`" ]; then 
     echo wldeploy still running 
    else 
     wait $! && echo "wldeploy succeeded" || echo "wldeploy failed" 
     break 
    fi 
done 
if [ $$ = "`ps -o ppid= -p $!`" ]; then 
    echo "wldeploy did not finish in $slept seconds, killing it" 
    kill $! 
    cat output.a 
fi 
+0

Hi Pra, 這幾乎就是我一直在尋找的東西。用它來制定我需要的代碼。但我正面臨一個奇怪的問題。當我運行腳本時,應定期顯示「wldeploy仍在運行」。但有時候這種方法有效,但有時候並不行。 例如,我第一次運行它,它工作正常。第二次,「wldeploy仍在運行」msg根本沒有出現。接下來執行它再次工作;等等。找不到爲什麼會發生這種情況。 ?:(任何想法 – 2010-05-18 13:08:14

+0

順便說一句,我的代碼 - 螞蟻部署和 上限= 600 deploy_check(){ 而 [$ {睡:-0} -le $極限];做 睡眠60 &&睡= 'expr $ {sleep:-0} + 60' if [$$ =「'ps -o ppid = -p $!'」「];然後 echo」Deploy still running。$ sleept secs「 else wait $ !&&回聲 「應用程序成功部署」 ||回聲 「部署失敗」 破 網絡 做 } deploy_check 如果[$$ =「'PS -o ppid = -p $!'「];然後 回顯「Deploy沒有在$ sleep secs中完成,這是日誌。」 ant log echo「按Ctrl + C鍵殺死,按Enter鍵繼續。」 閱讀日誌 limit ='expr $ {limit} + 300' deploy_check fi – 2010-05-18 13:11:19

+0

丹尼斯在您的其他問答中找到了您的修訂腳本的大部分問題。 – pra 2010-05-19 19:04:55

0

對於部分不終止wldeploy很容易,之前

{ sleep 900; tail -f output.a; } & 

執行對於殺死它的一部分,它是更爲複雜,因爲你必須確定wldeploy進程的PID 。 pra的答案正是這樣做的,所以我只想提到這一點。