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回答
-
这个问题很常见,简单来讲就是ansible是一个瞬时执行任务,所以如果要使用ansible调用java启动服务,这个依赖ansible启停的服务会随着ansible的执行完毕后结束进程,换一句话说,ansible不能直接调用java命令启动服务,可以尝试tomcat等类似的jave容器进行程序启停。或者直接使用docker封装你的java程序进行启停
012021-01-14 -
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
-----------------------------------------------------------------------------------------------
10 -
一路向北
2021-01-13
之前在网上搜到过类似的案例,有一些比较hack的java启动命令可以让ansible成功调用启停服务,不过不太建议这里花太多时间 直接使用tomcat或者使用进阶的docker
00
相似问题