无法从jenkins作业产生守护进程服务器
我想从Jenkins构建作业产生一个web服务器,虽然作业成功,但我遇到了Jenkins在作业退出时自动杀死后台作业的问题。无法从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
我读了詹金斯文档中关于spawning processes from build,并且还对ProcessTreeKiller,它告诉我,我应该能够通过daemonizing过程和BUILD_ID
环境变量设置为别的东西来实现这一点,所以我想这:
BUILD_ID=dontKillMe daemon --env="BUILD_ID=dontKillMe" --name="my-process" -- caddy -root `pwd` -port 26748
然而,尽管我不再得到Process leaked file descriptors
消息,这似乎仍然被杀死在退出的过程。尽管我试图直接在框上运行与Jenkins用户完全相同的命令,但它工作正常。
有谁知道我在做什么错?在工作结束后如何才能让这个过程继续下去?
我的问题是BUILD_ID
需要专门为daemon
进程设置,而不是它的子进程。出于某种原因,BUILD_ID=dontkillme daemon
没有这样做有效。
我解决了这个用通过对bash
会议通过的新BUILD_ID
一个bash
会话中运行daemon
命令:
BUILD_ID=dontKillMe bash -c "daemon --name="my-process" --command 'caddy -root `pwd` -port 26748'"
这现在已经成功地离开我的守护进程运行。
有一个技巧,你可以做,但它有点麻烦,但有效。
你可以做的是通过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作业执行时,一旦作业完成,Jenkins将终止ssh进程,而发送到后台的命令将继续在指定主机中执行。
我这样做通常用于检查和产卵源代码在源代码控制下(通常是git)的进程。
希望这会有所帮助!