1

Jenkins ビルド ジョブから Web サーバーを生成しようとしています。ジョブは成功しますが、ジョブが終了すると Jenkins がバックグラウンド ジョブを自動的に強制終了するという問題が発生します。

+ caddy -port 26748 &
Activating privacy features... done.
:26748
Process leaked file descriptors. See http://wiki.jenkins-ci.org/display/JENKINS/Spawning+processes+from+build for more information
Finished: SUCCESS

build からプロセスを生成することに関する Jenkins のドキュメントと、ProcessTreeKillerBUILD_IDについて読んだところ、プロセスをデーモン化し、環境変数を別のものに設定することでこれを達成できるはずであることがわかりました。

BUILD_ID=dontKillMe daemon --env="BUILD_ID=dontKillMe" --name="my-process" -- caddy -root `pwd` -port 26748

ただし、Process leaked file descriptorsメッセージは表示されなくなりましたが、これはまだ終了時にプロセスを強制終了しているようです。ボックスでJenkinsユーザーとまったく同じコマンドを直接実行しようとしましたが、正常に動作します。

私が間違っていることを誰かが知っていますか?ジョブが終了した後、このプロセスを存続させるにはどうすればよいですか?

4

2 に答える 2

1

私の問題は、子プロセスではなくBUILD_ID、プロセス専用に設定する必要があることでした。daemon何らかの理由で、BUILD_ID=dontkillme daemonこれを効果的に行っていませんでした。

セッションに渡された新しいコマンドを使用daemonして、セッション内でコマンドを実行することでこれを解決しました。bashBUILD_IDbash

BUILD_ID=dontKillMe bash -c "daemon --name="my-process" --command 'caddy -root `pwd` -port 26748'"

これで、デーモンプロセスが正常に実行されたままになります。

于 2016-06-14T12:45:59.433 に答える
0

代わりにできるトリックがありますが、少し面倒ですが効果的です。

できることは、ssh接続を介してbashスクリプトを実行し、プロセスのpidをどこかに保存しながらバックグラウンドに送信して、さらにチェックできるようにすることです。

コマンドの形式は次のとおりです。

ssh -n _hostname_ "_commands_ & echo \$! > \"_path_to_pid_file_\"" &

終わりのないプログラムの例:

ssh -n mycomputer.mydomain.com "tail -f /var/log/my.log & echo \$! > \"$WORKSPACE/pid\"" &

この例では、/var/log/my.log ファイル内の新しい変更を永遠にリッスンするテール プロセスを生成し、その pid を $WORKSPACE/pid ファイルに保存します。

Jenkins ジョブから実行された場合、ジョブが終了すると ssh プロセスは Jenkins によって強制終了されますが、バックグラウンドに送信されたコマンドは指定されたホストで実行されたままになります。

ソース コードがソース管理下にあるプロセス (通常は git) をチェックして生成するために、これを頻繁に行います。

お役に立てれば!

于 2017-02-02T12:02:32.003 に答える