ansible启动springboot项目失败

来源:6-1 课程总结

qq_再见青春

2021-01-13

ansible 的任务配置

- name: copy shell file
  copy: 'remote_src=no src={{ jenkins_workspace }}/{{ deploy_shell_file }} dest={{ dest_web_path }}/ansible_command/deploy.sh mode=0755 force=yes'
- name: copy jar file
  copy: 'remote_src=no src={{ jenkins_workspace }}/{{ deploy_path }}/{{ deploy_file }} dest={{ dest_web_path }}/{{ deploy_file }} mode=0755 force=yes'
- name: restart server
  shell: "{{ dest_web_path }}/ansible_command/deploy.sh"

deploy.sh和jar文件都已上传,服务器文件见下图
图片描述

deploy.sh启动java命令

nohup java -Dspring.profiles.active=prod -jar /apps/bcat-module-csp-2.3.0.jar >/dev/null 2>&1 &

deploy.sh的作用大致就是关闭springboot服务,然后启动springboot,大致的代码见下图
图片描述

问题:
在web服务器上直接执行deploy.sh可以重启springboot服务成功
由ansible的shell模块执行deploy.sh的时候,能够关闭springboot服务,无法启动springboot服务

写回答

3回答

一路向北

2021-01-13

这个问题很常见,简单来讲就是ansible是一个瞬时执行任务,所以如果要使用ansible调用java启动服务,这个依赖ansible启停的服务会随着ansible的执行完毕后结束进程,换一句话说,ansible不能直接调用java命令启动服务,可以尝试tomcat等类似的jave容器进行程序启停。或者直接使用docker封装你的java程序进行启停

0
1
qq_再见青春
非常感谢!
2021-01-14
共1条回复

qq_再见青春

提问者

2021-01-14

目前的结果看应该是老师提到的原因导致的启动失败,目前本人想到两个解决方案

1:使用supervisor管理springboot服务

2:将springboot服务注册到linux的systemctl管理中(本人已成功实践)

第二种实现方案

新建/etc/systemd/system/cspservice.service文件

内容如下:

------------------------------------------------------------------

[Unit]

Description=cspserver


[Service]

ExecStart= /usr/local/jdk1.8.0_202/bin/java -Dspring.profiles.active=prod -jar /apps/bcat-module-csp-2.3.0.jar



[Install]

WantedBy=multi-user.target

-----------------------------------------------------------------------------------------------




1
0

一路向北

2021-01-13

之前在网上搜到过类似的案例,有一些比较hack的java启动命令可以让ansible成功调用启停服务,不过不太建议这里花太多时间 直接使用tomcat或者使用进阶的docker

0
0

Jenkins+Ansible+Gitlab-三剑合璧掌握自动化部署

整合三大工具解决自动化部署&持续交付问题

1290 学习 · 319 问题

查看课程