昨夜 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 <<EOF
nohup java -jar …. &
EOF
第二种
在脚本一开始加上 source /etc/profile