通过Jenkins在远程服务器上启动守护进程SSH shell脚本神秘地退出

Eri*_*ric 7 ssh shell daemon jenkins

我在构建项目的jenkins上有一个构建工作,在完成后,它在远程服务器上打开一个ssh shell脚本并传输文件,然后停止并启动一个守护进程.

当我从RHEL服务器上的命令行停止并启动守护程序时,它执行得很好.当作业在jenkins中执行时,没有错误.

守护进程停止正常,它开始很好.但是在开始后不久,守护进程突然死亡.

sudo service daemonName stop
# transfer files.
sudo service daemonName start
Run Code Online (Sandbox Code Playgroud)

我确信这个问题并不存在

有谁知道Jenkins执行ssh shell脚本的方式有什么特别之处,这会导致守护程序启动不完全?

Eri*_*ric 7

问题:当通过jenkins执行构建时,启动守护进程的命令显然已成功执行,但在构建作业完成后,守护进程将突然退出.

解决方案:我一直以为这是jenkins杀死守护进程.因此,我尝试了许多不同的化身和排列,禁用ProcessTree模块,通过并清理僵尸子进程.我试过通过重置BUILD_ID环境变量来欺骗它.没有任何效果.

感谢这个线程,我发现该解决方案仅适用于在BUILD机器上执行的子进程.IE不适用于我的问题.

更多搜索引导我:通过ssh运行持久化进程

解决方案?NOHUP.

因此,现在构建通过执行以下命令成功重新启动守护程序:sudo nohup service daemonname start


rco*_*len 6

Jenkins监视由该作业产生的进程并杀死它们以避免僵尸进程.请参阅https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKiller

解决方法是覆盖BUILD_ID环境变量:

BUILD_ID=dontKillMe
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我在许多不同的化身中尝试了这个,但它似乎没有用.我已经尝试添加标志来关闭进程树杀手,我已经尝试在ssh脚本中更改构建ID我正在执行BUILD_ID = dontKillMe sudo服务servicename start是在"ssh上的远程主机上执行shell脚本" " 难道我做错了什么? (2认同)