このスクリプトは、hosts.txtからシステムIPを読み取り、システムにログインし、OSタイプを確認し、一連のコマンドを実行して、出力を出力します。
ssh部分は正常に機能しますが、「ls」の出力を表示した後、エラー(そのようなファイルまたはディレクトリはありません)が表示されます。
コマンド/opt/hyperic/agent-current/bin/hq-agent.shがリモートホストで実行されていないようです。目的は、コマンド 'cd / opt; lsを実行し、host.txtに記載されている各リモートシステムでコマンド出力をSTATUSにキャプチャすることです。
リモートシステムでコマンドを手動で実行すると、以下の出力が返されます。ここで何が間違っている可能性があるかについての助けはありますか?
~]# /opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'
が走っています
スクリプトは以下のとおりです
#!/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
スクリプトの出力-
[email protected]'s password:
firstboot
puppet
./hq-enhanced.sh: line 14: /opt/hyperic/agent-current/bin/hq-agent.sh: No such file or directory
== FAIL
ああ...何が起こっているのかわかります:
質問の鍵は次のとおりです。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加