SSH远程执行含nohup的bash脚本时Java进程启动后短时间退出问题
SSH远程执行nohup启动的Spring Boot进程短时间退出问题
场景复现
- 存在权限为755的启动脚本
test.sh,内容如下:
#! /bin/bash nohup /usr/bin/java -Xms4g -Xmx4g -Dspring.profiles.active=test -jar /home/users/me/test.jar > /dev/null 2>&1 & exit 1
- 远程执行脚本的命令为:
$> ssh test@server /home/users/me/sh/test.sh
- 异常现象:服务器上执行
jps可以短时间看到test.jar进程,SSH命令执行完成1~2秒后进程消失,监控日志示例如下:
test@server /home/users/me: jps 1281492 Jps 1281485 test.jar test@server /home/users/me: jps 1281546 Jps 1281485 test.jar test@server /home/users/me: jps 1281580 Jps
问题原因
核心原因为SSH远程执行命令的默认工作目录不符合Spring Boot的启动要求
Spring Boot启动时会默认读取当前工作目录下config文件夹内的配置文件,该案例中配置文件存放在/home/users/me/config路径下。
直接通过SSH执行远程脚本时,命令的默认工作目录不是/home/users/me,导致Spring Boot启动时找不到配置文件,初始化失败后进程自动退出。
解决方案
执行SSH命令时先切换到配置文件所在的工作目录,再执行启动脚本即可:
$> ssh test@server 'cd /home/users/me; /home/users/me/sh/test.sh'
也可以直接修改test.sh脚本,在启动Java进程前先执行cd /home/users/me切换目录,后续执行命令无需再手动切换目录。
内容的提问来源于stack exchange,提问作者Juneyoung Oh
相关产品推荐
相关产品推荐

