此脚本从hosts.txt读取系统IP,登录系统,检查操作系统类型,执行一组命令并打印输出。
ssh部分工作正常,但是在显示' ls''
的输出后显示错误(没有这样的文件或目录)。似乎命令/opt/hyperic/agent-current/bin/hq-agent.sh未在远程主机上执行。打算执行命令& cd / opt; ls并将命令输出捕获到host.txt中提到的每个远程系统上的STATUS。
当我在远程系统上运行manaully命令时,将返回以下输出。对这里可能出错的任何帮助?
~]# /opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'
isrunning
脚本如下
#!/bin/bash
while read host; do
if ssh -o StrictHostKeyChecking=no -n root@$host '[ "$(awk "/CentOS/{print}" /etc/*release)" ] '
then
echo "(centos)"
ssh -o StrictHostKeyChecking=no -n root@$host 'cd /opt;ls'
STATUS=`/opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'`
if [ "$STATUS" == "isrunning" ]
then
echo "$HOST == PASS"
else
echo "$HOST == FAIL"
fi
else
echo "(generic)"
fi
done < hosts.txt
脚本输出 -
root@10.10.1.1's password:
firstboot
puppet
./hq-enhanced.sh: line 14: /opt/hyperic/agent-current/bin/hq-agent.sh: No such file or directory
== FAIL
答案 0 :(得分:1)
啊......我明白发生了什么:
问题的关键是:
ssh -o StrictHostKeyChecking=no -n root@$host 'cd /opt;ls'
STATUS=`/opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'`
ssh命令立即运行并将控制权返回给脚本 - 此时您不再通过ssh登录,并且无论您从何处运行脚本,都会执行启动STATUS的行。
要捕获ssh命令的输出,您需要以下内容:
STATUS=`ssh root@foobar -c 'cd /foo/bar && /opt/hyperic/agent-current/bin/hq-agent.sh ...'`
HTH