一,初步
#執行方式
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 執行后無法退出,具體原理不清楚。