一,初步
#执行方式
ssh 192.168.2.103 " nohup java -jar /home/a/ipf/ight/feedback/ixxxedback-platform-1.0-SNAPSHOT.jar > out.file 2>&1 &"
执行完这边立即断开,日志写在指定文件。
参考文章:
https://blog.csdn.net/oneinmore/article/details/50073443
示例:
ssh target "./test.sh" # 等待命令完成后退出;本地Ctrl+C中断ssh会话,不会中断test.sh的执行(bash父进程变为1)(与登录终端执行命令而终端连接断开时的行为不一样)
ssh target "./test.sh &" # 等待命令完成后退出;本地Ctrl+C中断ssh会话,不会中断test.sh的执行(bash父进程本来就为1)
ssh target "nohup ./test.sh &" # 等待命令完成后退出;本地Ctrl+C中断ssh会话,不会中断test.sh的执行(bash父进程本来就为1)
ssh target "nohup ./test.sh >/dev/null 2>&1 &" # 启动test.sh执行后就会退出(bash父进程本来就为1)
ssh target "./test.sh >/dev/null 2>&1 &" # 启动test.sh执行后就会退出(bash父进程本来就为1),这也表明ssh不退出与nohup命令本身没有什么关系
jenkins ssh远程执行nohup Java 后无法断开
#问题
Jenkins exec 执行shell 脚本,远程启动jar 包后控制台信息一直在转圈,无法正常退出。命令为:
ssh user@IP " source /etc/profile && nohup java -jar xxxxx.jar > `date +%m%d`-out.file 2>&1 &"
查看部署服务器服务启动正常。
在Jenkins服务器上看进程 :
ps -ef |grep jenkins 发现子进程无法退出,即是执行启动命令,如上。
手动杀死后,部署服务器没有异常,说明nohup 没有异常,只是ssh 执行后没有退出。
su jenkins 进入后手动执行如上命令;没有正常退出,去掉source /etc/profile 重试, 无法正常启动jar 包,应该是没有环境变量。使用绝对路径执行:
ssh user@IP " nohup /path/to/bin/java -jar xxxxx.jar > `date +%m%d`-out.file 2>&1 &" 后成功,原因是source 引起的,导致ssh 执行后无法退出,具体原理不清楚。