我是linux菜鸟!我有我的服务器并安装了詹金斯。我需要创建 bash 脚本,该脚本应该在 jenkins 编译后运行应用程序(或者如果已经启动,则将重新启动)。我尝试在 Linux 中使用 screen util,但它对我不起作用。我写了这个脚本:
screen -X -S JavaTelegramBot quit
screen -d -m -S JavaTelegramBot
screen -X -S JavaTelegramBot java -jar "path/to/jar"
当我给小费时screen -ls
,它是空的,所以应用程序无法工作。我什至尝试使用nohup。它只启动应用程序几秒钟,直到詹金斯完成他的构建。构建后在 jenkins 中使用 cmd 命令启动的脚本
答案1
这是由于詹金斯的进程树杀手,这会在作业退出后杀死 Jenkins 作业启动的所有进程(即使您使用 screen/tmux/nohup/etc 在后台运行作业)。
根据上面链接的文档,防止 Jenkins 终止长时间运行的进程的方法是设置一个环境变量:
如果您的构建想要让守护进程留在后面运行......
实现此目的的一个便捷方法是更改 Jenkins 的 ProcessTreeKiller 正在寻找的环境变量 BUILD_ID。这将导致 Jenkins 假设您的守护进程不是由 Jenkins 构建生成的。例如:
BUILD_ID=dontKillMe /usr/apache/bin/httpd
如果是 Jenkins Pipeline,请使用 JENKINS_NODE_COOKIE 而不是 BUILD_ID