Jenkinsから、ANT XMLに存在するターゲットに基づいて、そのターゲットを呼び出します。そのターゲットにはSSHEXEC
タスクがあります。
そのSSHEXEC
タスクでは、コマンドにスクリプトの呼び出しがあります。
基本的に、スクリプトコードは次のようになります。
waitForAggregationJobCompletion()
{
while [ 1 ]
do
# Checks for the condition
if [ #Condition] ;then
break;
fi
if [ #Different condition ]; then
break;
fi
done
waitForAggregationJobCompletion
基本的に、この関数 " waitForAggregationJobCompletion
"が呼び出されると、while [1]ループに入り、条件をチェックし続けます。ifが「IF」条件に存在する条件を満たせば、それは壊れるはずです。
スクリプトが1.5時間実行される場合、これは適切に実行されます。ただし、スクリプトが長時間実行されている場合、Jenkinsではまだ実行中であると表示されますが、Linuxサーバーの場合と同様に実行されません。
それが原因にあるsshexec
だけ一定時間スクリプトプロセスを保持することができANTタスク?または、sshd_config
このwhile [1]条件ベースのスクリプトをトリガーして長時間実行する前に、ファイルにパラメーターを追加する必要がありますか。
スクリプトにロギングリダイレクトを入れ、リダイレクト先のエコーステートメントを1つ入れました/dev/null
が、うまくいきませんでした。
リダイレクトをログに記録し続けると、そのログが日付とともに 2.10 時間近く出力され、その後、そのファイルにはログが記録されません。
手伝ってくれませんか。
BjørnJohansenによる「SSHタイムアウト防止–SSHセッションを存続させる」に記載されているヒントの1つが確認できます。
たとえば、クライアント側では次のようになります。
でローカルSSH構成ファイルを編集して
~/.ssh/config
、次の行を追加できます。
ServerAliveInterval 120
これにより、SSH接続で120秒ごとに「ヌルパケット」が送信され、SSH接続が存続します。
Jenkinsのコンテキストでは、それは~/.ssh/config
Jenkinsスレーブでジョブを実行するユーザーのものになります。
ただし、サーバー側へのアクセス/制御がある場合:
/etc/ssh/sshd_config
サーバーのSSHデーモン構成に以下を追加して、クライアントがタイムアウトしないようにします。これにより、クライアントはローカルのSSH構成を変更する必要がなくなります。
ClientAliveInterval 120
ClientAliveCountMax 720
これにより、サーバーは120秒ごとにクライアントに「ヌルパケット」を送信し、クライアントが720間隔(120秒* 720 = 86400秒= 24時間)非アクティブになるまでクライアントを切断しません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加