ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
2017-05-26 15:27
483 查看
1.背景:shell脚本在主机器上执行kafka的启动命令,其他机器也会起这个进程。
之前的脚本每次执行的时候出现卡住的现象,不能回到命令行。
解决方法:第一种
#/bin/bash KAFKA_HOME=/opt/kafka source /opt/wyl/cfg.config su - hadoop <<EOF for mm in ${ip[*]};do echo "===>"\${mm}: ssh hadoop@\${mm} "cd /opt/kafka ; nohup ./bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties > /opt/kafka/kafka.log & [ $? -eq 0 ] && echo 'kafka is start...' " done EOF
其中ip就是所有需要执行的机器列表。
ssh hadoop@${mm}后续必须要跟双引号
其中分号是分隔命令的作用
/opt/kafka/kafka.log 是将日志打印到这个地方
第二种:
ssh root@ip << remotessh首先要ssh上去,ssh的配置可以看我的上一篇文章,注意这里的<< remotessh
从这里开始都是在远程机器上执行命令啦
cd /tmp/test/
rm -f test.txt
cat test.log | grep ‘test’ >> test.txt
echo “finished!”
执行完毕
exit ###不要忘记退出远程机器
remotessh ###还有这里的结尾哦,不要忘记
#!/bin/bash 2 KAFKA_HOME=/opt/kafka 3 source /opt/wyl/cfg.config 4 su - hadoop <<EOF 5 for mm in ${ip[*]};do 6 echo "===>"\${mm}: 7 ssh -Tq hadoop@\${mm} << remotessh 8 cd /opt/kafka 9 nohup ./bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties > /opt/kafka/kafka.log & 10 [ $? -eq 0 ] && echo 'kafka is start...' 11 exit 12 remotessh 13 done 14 EOF
这种方法执行脚本之后,会打印出
Pseudo-terminal will not be allocated because stdin is not a terminal.
字面意思是伪终端将无法分配,因为标准输入不是终端。
强迫症的人肯定感觉很烦的。
这个时候我们可以加上参数去解决这个问题。
所以需要增加-tt参数来强制伪终端分配,即使标准输入不是终端。
或者加上-Tq这个参数也可以。
加上-tt运行结果: ssh -tt hadoop@’xxxx’
每个终端都打印出执行的命令
加上-Tq的运行结果 ssh -Tq hadoop@’xxxx’
相关文章推荐
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.
- ssh@host:""ssh切换到其他机器上执行多条命令;Pseudo-terminal will not be allocated because stdin is not a terminal.