我有打算菊花链在一起,在一组都在一个文件中列出了服务器,每行一个的运行特定的脚本,一些简单的脚本。
单一服务器部署脚本包含以下内容:
1 #!/bin/bash
2
3 file=$1
4 host=$2
5
6 scp ${file} ${host}:/tmp/
7 USER=`whoami`
8 ssh -t -t $USER@${host} /tmp/${file}
9
10 ssh "${host}" /bin/rm /tmp/${file}
11 exit
它工作正常上一个脚本我有百胜安装Tomcat和符号链接的Hadoop / HBase的CONFIGS到共享目录类。
第二个主要文件是deploy-all.sh其目的是解析主机列表和运行部署脚本,所有的人:
1 #!/bin/bash
2
3 script=$1
4
5 cat dumbo-hosts | while read fileline
6 do
7 echo ${fileline}
8 ./deploy.sh ${script} ${fileline}
9
10 sleep 10
11 done
什么情况是,脚本运行一次,然后for循环被打破......我有类似以下的输出:
$ ./deploy-all.sh setup-tomcat.sh
line is hadoop01.myhost
setup-tomcat.sh 100% 455 0.4KB/s 00:00
tcgetattr: Inappropriate ioctl for device
hadoop02.myhost
hadoop03.myhost
hadoop04.myhost
<succesful output of hadoop01 task>
...
Connection to hadoop01.myhost closed.
如果我注释掉SSH命令循环成功地通过所有4台主机上运行,所以我假定这涉及一旦发生SSH STDIO被截断的东西。 另外,tcgatattr错误我担心一些。
我怎样才能解决这个问题? 究竟是什么导致了tcgetattr错误(我甚至不知道,如果是相关的)? 还没有真正做了很多与shell脚本很抱歉,如果我失去了一些东西真的很明显这里,任何帮助,将不胜感激。