ディスク領域のロギングのためのシンプルなシェルスクリプト

ディスク領域のロギングのためのシンプルなシェルスクリプト

私はサーバーセットからディスクスペースを自動的に収集する作業をしています。

標準端末で以下を実行すると:

ssh server1 ssh server2 df -h 

その後、コマンドの出力を取得しました。

しかし、Forループを使用するスクリプトでこれを試した場合。それから失敗しました。

スクリプトの例:

#!/bin/bash

GROUP="server1 server2"

for s in $GROUP; do 
    ssh bastion1 ssh ${s} df -h
done

後者の例では、出力(またはその問題のエラー)は発生しません。様々なエスケープや引用を試してみましたが、まだ運がありません。これが私が見落としている明白な何かという感じがします。どんなアドバイス?

ベストアンサー1

2つの方法があります

方法1:

Groups="server1 server2"
echo $Groups | xargs -n1 |  xargs  -I'{}' echo ssh '{}' df

注: - 上記のコマンドの出力が良好であれば、echo最後に削除すると、リモートサーバーでコマンドが実行されます。環境変数と同様に、変数を大文字として使用しないでください。

方法2:

以下のスクリプトを参照してください。

#!/bin/bash
# ssh password less login is required

# mention below remote server seperated by space

remote_srv=( 127.0.0.1 127.0.0.2 127.0.0.3 )

do_ssh() {
    ssh $s "$@"
    echo -e
}

header() {
    echo "#==================={$@}==========================#"
}

n=${#remote_srv[@]} # number of ip's in array

for (( i=0;i<$n;i++)); do
            echo -e
            echo "$(tput bold)$(tput setaf 2)* Connected Server: ${remote_srv[$i]}  @@ $(date) @@"
            echo "* Fetching info...$(tput sgr 0)"
            s=${remote_srv[$i]}

            header "Memory Usage"
            do_ssh free -m

            header "Disk Usage"
            do_ssh df -h
done

## EOF

おすすめ記事