2013-05-21 38 views
7

私のプロジェクトをビルドしているジェンキンズでビルドジョブを持っており、実行後にリモートサーバー上にsshシェルスクリプトを開き、ファイルを転送し、デーモンを起動します。ジェンキンスを経由してリモートサーバー上でデーモンを起動するSSHシェルスクリプトが不思議に終了する

RHELサーバーのコマンドラインからデーモンを停止して起動すると、正常に実行されます。ジョブがジーンキンで実行されると、エラーは発生しません。

デーモンが正常に停止し、正常に起動します。しかし、起動直後、デーモンは突然死にます。

sudo service daemonName stop 
# transfer files. 
sudo service daemonName start 

私は問題は

をパス指定されていないことを確信している

誰もがジェンキンスさんは、デーモンが完全に完了していないに開始引き起こすSSHシェルスクリプトを実行している方法についての特別な何ができるか知っていますか?

+0

あなたはログを確認しまし起動daemonname?そこにはどんな誤りがありますか? – fedorqui

+0

ジェンキンスのログ?またはコンソールログ?またはデーモンのログ? コンソールログにすべての処理が成功したことが示されます。 デーモンのログに問題が表示されない jenkinsのログが参考になるとは思えません。 – Eric

+0

デーモンが適切にデーモン化されていない可能性があります。ジェンキンスのシェルスクリプトに 'sleep 10000'を追加して、起動しているシェルが閉じられていないときに実行時間が長くなっているかどうか確認しましたか? Jenkinsの 'env'出力とシェルを比較しようとしましたか?それが自家製デーモンの場合、ロケールのようなものの影響を受けるかもしれません。 –

答えて

6

問題: ジェンキンスてビルドを実行すると、デーモンプロセスを起動するコマンドは明らかに成功し実行し、まだ後のことでした を参照してくださいhttps://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

この問題を回避するには、BUILD_ID環境変数をオーバーライドすることですビルド作業が完了したら、デーモンは突然終了します。

解決策: 私はデンモンを殺害したジェンキンズであると全面的に考えました。だから私は、ゾンビの子プロセスを通過してクリーンアップするProcessTreeモジュールを無効にする多くの異なる化身と順列を試みました。私はBUILD_ID環境変数をリセットすることでそれを欺くことを試みました。何も働かなかった。

このスレッドのおかげで、その解決策はBUILDマシンで実行される子プロセスでのみ機能することがわかりました。 I.私の問題には適用されません。

詳細検索はここで私を導い:Run a persistent process via ssh

ソリューションを? Nohup。

だから今のビルドが正常に次のコマンドを実行してデーモンを再起動します。 はsudo nohupをサービス

+0

nohupも私を助けてくれました...しかし、行の最後に「&」を付けると、それはうまくいきませんでした。私は、リモートスクリプト呼び出しを動作させるために '&'を省略しなければなりませんでした。 – noumenon

6

ジェンキンスは、ゾンビプロセスを回避するために、ジョブによって生成されたプロセスを監視しています。

BUILD_ID=dontKillMe 
+2

さて、私はこれを多くの異なる化身で試しましたが、うまくいかないようです。私は BUILD_ID = dontKillMe sudoのサービスを実行しています私はsshのスクリプトでビルドIDを変更しようとした、プロセスツリーのキラーをオフにするフラグを追加しようとしたことは を開始SERVICENAME「実行シェルでありますssh経由のリモートホスト上のスクリプト " 何か間違っていますか? – Eric

+0

よろしくお願いします。プロセス3のキラーは、ジェンキンノード(または接続されたスレーブ)上で実行されますが、リモートマシン上では実行されないため、問題の原因は他の場所になければなりません。 – rcomblen

+0

私はあなたがしてうれしいです、あなたの答えはちょうど私の1日の頭痛を解決しました。ありがとう=) –

関連する問題