我有以下bash
脚本:
#!/bin/bash cat /etc/hadoop/conf.my_cluster/slaves | \ while read CMD; do ssh -o StrictHostKeyChecking=no ubuntu@$CMD "sudo service hadoop-0.20-mapreduce-tasktracker restart" ssh -o StrictHostKeyChecking=no ubuntu@$CMD "sudo service hadoop-hdfs-datanode restart" echo $CMD done
/etc/hadoop/conf.my_cluster/slaves
拥有5台奴隶机的IP.在datanode
无法沟通的jobtracker
,所以解决的办法就是重新启动它.输出是:
ubuntu@domU-12-31-39-07-D6-DE:~$ ./test.sh Warning: Permanently added '54.211.5.233' (ECDSA) to the list of known hosts. * Stopping Hadoop tasktracker: stopping tasktracker * Starting Hadoop tasktracker: starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-domU-12-31-39-06-8A-27.out Warning: Permanently added '54.211.5.233' (ECDSA) to the list of known hosts. * Stopping Hadoop datanode: stopping datanode * Starting Hadoop datanode: starting datanode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-datanode-domU-12-31-39-06-8A-27.out 54.211.5.233
但是,在它应该运行的5个IP地址中,只执行了第一个.我怎么能解决这个问题?
我们问shellcheck:
$ shellcheck yourscript In yourscript line 3: while read CMD; do ^-- SC2095: ssh may swallow stdin, preventing this loop from working properly. In yourscript line 4: ssh -o StrictHostKeyChecking=no ubuntu@$CMD [...] ^-- SC2095: Add < /dev/null to prevent ssh from swallowing stdin.
你去吧