2016-06-30 3 views
2

Jenkinsジョブをセットアップしてシェルスクリプトのタイムアウトに関する問題を発見しました。シェルスクリプトのタイムアウトを設定し、時間が終了して終了する(0)ようにする

それはこのように動作します:

スタートジェンキンス→control.shが起動される→test1.shcontrol.shcontrol.sh

パートコードに発売されたことのようである:func.shの

#!/bin/sh 
source func.sh  

export TIMEOUT=30 
# set timeout as 30s for test1.sh 

((sleep $TIMEOUT && function_Timeout) & ./test1.sh) 
# this line of code is in a = loop actually 
# it will launch test2.sh, test3.sh... one by one 
# later, I want to set 30s time out for each of them. 

function_Timeout() { 
    if [ ! -f test1_result_file]: then 
    killall test1.sh 
    # the test1_result_file will not 
    # be created if test1.sh is not finished executing. 
    fi 
} 

一部としてあります以下

#!/bin/sh 
function trap_fun() { 
    TRAP_CODE=$? 
    { if [ $TRAP_CODE -ne 0 ]; then 
     echo "test aborted" 
    else 
     echo "test completed" 
    } 2>/dev/null 

trap "trap_fun" EXIT 

control.shがJenkinsジョブによって起動された後、control.shは、時間が終了してkillall test1.shの行に達したときに終了し、Jenkinsジョブは停止して失敗します。

私はtest1.shが殺され、終了コードが0ないので、それはこの問題を引き起こしているからだと思います。

私の質問は、サブスクリプト(私の場合はcontrol.shのように、メインスクリプトによって起動された)を終了または終了させるための方法ですか?コード0で終了しますか?

は、7月1日更新:答えを

おかげで今のところ、私はレオンの提案@しようとしたが、私は、タイムアウトの強制終了アクションによって送信されたコード124は、まだトラップコードでキャッチされた - トラップ「trap_fun」 EXITはfunc.shにあります。

詳細を追加しました。私はたくさんのGoogleの仕事をしたが、まだこの問題を解決する適切な方法を発見していない:(あなたの親切な助けのため

おかげ

+1

@ 123返信いただきありがとうございます! test1.shでそれをトラップする方法を指定できますか?申し訳ありませんが、シェルには初めてです –

+0

- なぜサブシェルを使用していますか? - 'f_Timeout'とは何ですか?私はあなたのサンプルコードで定義された 'function_Timeout'を見るだけです。 –

+0

@Fara私のタイプミスに申し訳ありません:( –

答えて

0

私はこの問題を最後に解決しました。各testX.shに以下のコードを追加しました。

trap 'exit 0' SIGTERM SIGHUP 

killallシグナルを受信した後、正常にtest1.shを終了させるためです。

ありがとうございました!

2

coreutilsからtimeoutユーティリティを使用します!

#!/bin/sh 

timeout 30 ./test1.sh 
status=$? 
if [ $status -eq 124 ] #timed out 
then 
    exit 0 
fi 
exit $status 

注意をこれは、実行中のタイムアウト処理のバージョンと若干異なります。実行中のインスタンスがすべてタイムアウトすると、test1.shの実行中のインスタンスはすべて終了します。

+0

ありがとうございました!私はあなたのやり方を試しましたが、トラップ "trap_func" EXITコードが見つかったところ、124コードはまだトラップ "trap_func"によって捕捉されていますEXIT :(およびjenkinsジョブ失敗し、終了する。 –

関連する問題