2017-07-18 4 views
1

Jenkinsから、ANT XMLに存在するターゲットに基づいて、そのターゲットを呼び出します。そのターゲットにはSSHEXECのタスクがあります。SSHEXECタスクはJenkinsから呼び出されたAntのコマンド呼び出しスクリプトを2時間後にタイムアウトします

そのSSHEXECタスクでは、コマンドはスクリプトを呼び出しています。

基本的にスクリプトコードは以下のようになります:

waitForAggregationJobCompletion() 
{ 
while [ 1 ] 
do 
# Checks for the condition 

if [ #Condition] ;then 
break; 
fi 

if [ #Different condition ]; then 
break; 
fi 

done 
waitForAggregationJobCompletion 

基本的には、この機能たら「waitForAggregationJobCompletionが」と呼ばれ、それはしばらくの間に入る条件をチェックする[1]ループ&キープ。 IFが "IF"状態にある条件を満たすと、それは中断するはずです。

これは、スクリプトを1.5時間実行した場合に良好に動作します。しかし、スクリプトが長い時間実行されている場合、Jenkinsでは、まだ実行中だが、Linuxサーバー上では実行されない場所があるという。

ANTのsshexecタスクは、特定の時間だけスクリプトプロセスを保持できるためですか?または私はsshd_configファイルに任意のパラメータを追加する必要がありますか?[1]条件ベースのスクリプトは、より長い時間実行するためにこれをトリガする前に。

私はにリダイレクトするために& echoステートメントのスクリプトにロギングのリダイレクトを入れましたが、うまくいきませんでした。

私は再指向を続けていたときに、そのログを日付2.10時間で印刷しました。&そのファイルにはログがありません。

私を助けてもらえますか?

答えて

0

あなたは、例えば、クライアント側ではビョルン・ヨハンセンによって「SSH timeout prevention – keep SSH sessions alive」に

を述べたヒントの一つかどうかを確認することができます

あなたが~/.ssh/configでローカルのSSHの設定ファイルを編集して追加することができます次の行:

ServerAliveInterval 120 

これがお送りしますあなたのSSH接続で120秒ごとに "ヌルパケット"を送信して、それらを生かしてください。

Jenkinsコンテキストでは、Jenkinsスレーブでジョブを実行しているユーザーの~/.ssh/configになります。


しかし、あなたはサーバ側へのアクセス/コントロールを持っている場合:

タイムアウトするクライアントを防ぐために、サーバー上/etc/ssh/sshd_configであなたのSSHデーモンの設定に以下を追加します - ので、彼らはドン」トン地元のSSHの設定を変更する必要があります。

ClientAliveInterval 120 
ClientAliveCountMax 720 

これは、サーバーは、CLIを送るようになります120秒ごとに「ヌルパケット」を送信し、クライアントが720インターバル(120秒* 720 = 86400秒= 24時間)で非アクティブになるまで切断しません。

+0

現在、私のサーバーで/ etc/ssh/sshd_configにクライアントパラメータを追加しました。それは働いている。ありがとう。クライアント側では、私は、ジェンキンスの側で、私が120としてServerAliveIntervalを追加すると、接続は永遠に生きていますか? ServerAliveCountMaxも追加する必要があるので、しばらくしてから開いたssh接続を終了できます。 –

+0

@DheerajKumarYはい、ServerAliveCountMaxはクライアント側で役に立ちます。 – VonC

関連する問題