昨夜1:00多准備睡覺了,突然一哥們咨詢了我一個問題。
他A機器上遠程執行B機器(ssh user@ip "command")上的腳本,B上的服務並沒有起來。
-
看了下截圖,腳本確實是執行了的,而且他說B本機上執行時可以的。
-
於是看了下腳本,其中有一段如下
if [ xxxx ];then
xxxx
else
nohup java -jar ../xxx.jar >/dev/null 2>&1 &
echo "xxxx"
fi
感覺可能是相對路徑問題,於是讓他改為絕對路徑,試了后也不行。
然后讓他試了下,B上用sh -x執行腳本 ,發現也沒啥毛病。
再讓他試了下, A上遠程執行腳本,發現nohup那條命令沒執行,直接就執行了nohup后面的echo命令,A上執行方式如下
ssh user@IP "sh -x 腳本"
然后嘗試在A上直接遠程執行nohup命令也不行,如下:
ssh user@ip "nohup java -jar ../xxx.jar >/dev/null 2>&1 &"
查了些資料發現 ssh遠程執行命令的時候,被遠程機器的有些環境變量是無法獲取的,比如java環境信息,所以java命令執行不出來,於是用如下兩種方式解決。
#第一種
ssh user@ip <<EOF
nohup java -jar .... &
EOF
#第二種
在腳本一開始加上source /etc/profile