持续集成 关于 Jenkins 无法远程启动 Tomcat 的问题

徐汪成 · 2022年11月18日 · 最后由 徐汪成 回复于 2022年11月21日 · 4371 次阅读

先描述下问题:
在 A 机器上搭建了 jenkins,B 机器是测试环境
jenkins 创建 item,从 gitlab 上拉取代码编译 war 包通过 ssh 发送到 B 机器上,B 机器上有个脚本,执行停止 tomcat(通过 kill 命令),备份拷贝 war 等操作,再执行 tomcat 的 startup.sh 脚本。
发现只要 jenkins 一退出,启动的 tomcat 进程也不在了,试过很多方法,比如加 BUILD_ID,export JAVA_HOME,TOMCAT_HOME 等,直接在脚本里启动 tomcat 的 bootstrap 程序都不行,后来换了一台机器测试了下,发现那台机器就没这个问题,就怀疑是 B 机器本身的问题,问了开发和运维都不知道。
本来想直接把 war 包更新到 tomcat 的 webapps 目录下,这样就不用重启 tomcat,但是领导说一定要和开发人员的操作流程一样。
如果有遇到过这种问题的兄弟,麻烦指点下!

最佳回复

问题已解决:
新版的 sshd 服务,配置文件中,退出 ssh 后,默认配置会杀死当前控制组里面的所有子进程,修改策略即可,退出 ssh 的杀死程序(KillMode)
有如下策略:
1、control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
2、process:只杀主进程
3、mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
4、none:没有进程会被杀掉,只是执行服务的 stop 命令。

查看/lib/systemd/system/sshd@.service 文件,保证内容与下面的一致,尤其是 KillMode=process,如果没有这一行,请自行追加
[Unit]
Description=OpenSSH per-connection server daemon
Documentation=man:sshd(8) man:sshd_config(5)
Wants=sshd-keygen.service
After=sshd-keygen.service

[Service]
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=-/usr/sbin/sshd -i $OPTIONS
KillMode=process # 追加这个配置
StandardInput=socket
重新加载配置并重启 sshd 服务
systemctl daemon-reload
service sshd restart

共收到 4 条回复 时间 点赞
徐汪成 关闭了讨论 02月28日 09:20

问题已解决:
新版的 sshd 服务,配置文件中,退出 ssh 后,默认配置会杀死当前控制组里面的所有子进程,修改策略即可,退出 ssh 的杀死程序(KillMode)
有如下策略:
1、control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
2、process:只杀主进程
3、mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
4、none:没有进程会被杀掉,只是执行服务的 stop 命令。

查看/lib/systemd/system/sshd@.service 文件,保证内容与下面的一致,尤其是 KillMode=process,如果没有这一行,请自行追加
[Unit]
Description=OpenSSH per-connection server daemon
Documentation=man:sshd(8) man:sshd_config(5)
Wants=sshd-keygen.service
After=sshd-keygen.service

[Service]
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=-/usr/sbin/sshd -i $OPTIONS
KillMode=process # 追加这个配置
StandardInput=socket
重新加载配置并重启 sshd 服务
systemctl daemon-reload
service sshd restart

多老的系统?走 systemctl 重启任务

job startup.sh 放到后台执行就可了,如果是在 job 里的 shell 一直执行,相当于 job 还在执行,Jenkins 关了肯定挂啊

你这种情况是进程运行完毕就被 kill 掉了
jenkins 脚本开头加上
BUILD_ID=DONTKILLME

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册