2016-05-20 5 views
1

更新:以下の説明に基づいて、より正確な説明のために私の答えを編集しました。バックグラウンドプロセスとしてjenkinsからnohupコマンドを実行できません

私はjenkinsからnohupコマンドを実行しようとしています。

nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 & 

このコマンドは機能しません。私はジェンキンスで成功としてステータスを見ることができますが、Linuxではjavaプロセスはありません。私が 'ps -ef | & 『」私は最後を削除すると

しかし』グレップのJavaは、それは私がそれが動作を開始forground代わりの背景

での実行からそれを変更しています。私はJavaプロセスが開始されたのを見ることができます。

私はLinuxのコンソールでそれを実行する場合、元のコマンドは正常に動作します。

バックジェンダープロセスとしての元の形式でジェンキンズから実行する必要があります。それで、それはジェンキンとは独立している。

これはどうして起こりますか?

+0

それは動作していません、それはあなたが 'command ...&'を書くので、バックグラウンドに行くことです。 'jobs'の出力をチェックするか、' ps -ef | grep nohup'です。 – fedorqui

+0

いいえ、私は確認しました。 –

+1

'&'なしで同じことを言うなら、それはうまくいくのですか?つまり、 'nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1'です。 – fedorqui

答えて

0

は、同じ問題を抱えて追加:シェルの実行に

BUILD_ID=dontKillMe python /var/lib/jenkins/release.py 

- >コマンドをしてrelease.pyの内側にあります:、

os.system('nohup java -jar ' + new_jars_on_server + '/' + generated_jar_by_mvn_name + '&') 

、それは

0

かいつまんで動作しますJenkinsは、ジョブが終了すると、ジョブによって生成されたすべてのプロセスを強制終了します。この動作を無効にするには、環境変数を設定する必要があります。

変数がジョブの種類によって異なるように見えます。以前はBUILD_IDでしたが、パイプラインジョブの場合はJENKINS_NODE_COOKIEであり、他のいくつかはthis answerに記載されています。

あなたがパイプラインであなたのコマンドを実行しているのであれば、それは次のようになります。

sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar /home/.../jar/server-process-0.35.jar prod >> /var/../server-process-prod.log 2>&1 &' 

は、より多くの情報のためthe wiki on ProcessTreeKillerthis comment in the Jenkins Jiraを参照してください。

関連する問題