昨夜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近程的时候执行nohup命令,是无奈获取被近程机器的环境变量的,所以java命令执行不进去,于是用如下两种形式解决。
第一种
ssh user@ip <
nohup java -jar …. &
EOF
第二种
在脚本一开始加上source /etc/profile