在shell脚本中for循环执行ssh操作远程主机命令执行失效的问题

时间:2024-03-26 16:11:07

首先看一下shell脚本:
#! /bin/bash
for i in node2 node1
do
ssh $i ‘java -classpath /opt/file/project_datawarehouse/log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.jiahua.appclient.AppMain $1 $2 > /opt/file/project_datawarehouse/test.log & exit’
echo $i;
echo “xxxxxxxxxxxxxxxxx”;
done

期间经历了N多问题,此处做个记录。
**1.**本机node1执行无效,node2没反应->粗心大意把$i写成了$1。

**2.**本机node1执行有效,node2无反应->后面没有exit,我也不知道为什么T-T,好像是进入了远程主机操作而非本机。

**3.**本机本机node1执行有效,node2产生了test.log文件但是为空。其实这个点也不算弄懂了,因为查到的是bash有四种模式,然后可能和登录后的环境变量有关系,然后又查到了一个文档说shell和非shell直接环境变量的关系,如图:
在shell脚本中for循环执行ssh操作远程主机命令执行失效的问题
这是在红黑联盟中的一个先驱者写的,不点名了。
然后我就大胆的试了试,前面也试过很多种改法,但是直到这种生效才结束--------------------》
把/etc/profile里自己加的那些环境变量(最主要应该还是Java环境变量)添加到了/etc/bashrc文件里,source /etc/bashrc 一下,再执行就没问题了。
具体是在本机加还是远程机加就得自己去试了,因为我都加上了各自的环境变量。
卡了两天的小BUG终于解决,开心!