请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ansible启动springboot项目失败

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回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_再见青春 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-01-14 11:08:32
提问者 qq_再见青春 2021-01-14 11:08:08

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

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 回复 有任何疑惑可以回复我~
一路向北 2021-01-13 21:41:29

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号