Bash脚本循环遍历列表以检查服务器状态

时间:2016-10-26 09:21:05

标签: linux bash

我正在尝试创建一个脚本,用于ping其他内容,列表中的远程服务器。

这就是我所拥有的,但不断收到此错误:

./ monitor_sats.sh:无法为命令替换设置管道:打开的文件太多。

这是我的代码,感谢您的帮助。

 #!/bin/bash


 function ping {

   for i in `cat server_list`
   do
     ping -c1 ${i} > /dev/null
       if [ ${?} -eq 0 ]; then
         echo "$(tput setaf 2)ON$(tput sgr0)"
     else
        echo "$(tput setaf 1)OFF$(tput sgr0)"
     fi
   done
}



 echo "AMSTERDAM - Server  $(ping) "
 echo "HONG KONG - Server  $(ping) "
 echo "LONDON    - Server  $(ping) "
 echo "SINGAPORE - Server  $(ping) "

3 个答案:

答案 0 :(得分:1)

更改功能名称如下;

#!/bin/bash
function pingToServer {
  for i in `cat server_list`
   do
    ping -c1 ${i} > /dev/null
       if [ ${?} -eq 0 ]; then
         echo "$(tput setaf 2)ON$(tput sgr0)"
     else
        echo "$(tput setaf 1)OFF$(tput sgr0)"
     fi
   done
}

 echo "AMSTERDAM - Server  $(pingToServer) "
 echo "HONG KONG - Server  $(pingToServer) "
 echo "LONDON    - Server  $(pingToServer) "
 echo "SINGAPORE - Server  $(pingToServer) "

你也可以使用它;

#!/bin/bash
Countries=("AMSTERDAM" "HONG KONG" "LONDON" "SINGAPORE")
counter=0
cat server_list | while read server; 
do
 ping -c1 ${server} > /dev/null
 if [ ${?} -eq 0 ]; then
         echo "${Countries[$counter]} - SERVER- $(tput setaf 2)ON$(tput sgr0)"
     else
         echo "${Countries[$counter]} - SERVER-$(tput setaf 1)OFF$(tput sgr0)"
     fi
    counter=$(($counter+1))
done

答案 1 :(得分:0)

这个脚本在语法上看起来是正确的,但有一些东西是有线的:为什么ping不同城市的相同服务器列表?

这让我觉得你没有给出整个背景......

另外,你能给出ulimit -a的输出吗?并告诉列表的大小?

答案 2 :(得分:0)

for i in $(cat list_server) ; 
do ping -c 1 -w 1 $i > /dev/null && echo "$i - OK" || echo "$i - NOK" ; 
done