%を使用して特定のサーバーへのパスを確認し、ファイルに保存されているパスより大きい場合はしきい値と比較します。

%を使用して特定のサーバーへのパスを確認し、ファイルに保存されているパスより大きい場合はしきい値と比較します。

fi.csvサーバーにログインできるファイルnameが含まれています。スクリプトを使用してディスク使用率を確認してください。 ---指定されたしきい値と比較すると、データをファイルに保存する必要があります。pathsuperusermain.csv

はいfi.csv

awlp212,/op/s,quick
awlp213,/AM/D,quick

出力:

Consumption is crossing threshold on /op/s on awlp212.
Consumption is 10 % on awlp13. 

スクリプトは正しい結果を提供しますが、結果を main.csv

for csv in $(cat fi.csv)
do
    a_server=`echo $csv | cut -d ',' -f 1`
    a_path=`echo $csv | cut -d ',' -f 2`
    user_id=`echo $csv | cut -d ',' -f 3`
    HOSTNAME=`hostname -A`
    ssh -n $user_id@$a_server path=$a_path ' 
    var=$(df -h|grep "$path$"|awk '\''{print $5}'\''|cut -d "%" -f1)
    host=$(hostname)

    if [[ $var -ge 60 ]]; then
        echo "Consumption is crossing threshold on $path on $host." 
    else
        echo "Consumption is $var % on $host. "
    fi' > main.csv
done

答え1

あなたはい出力をに保存しmain.csvますが、ループを繰り返すたびにファイルを上書きします。直後にリダイレクトを移動しますdone

また、リモートシステムであまりにも多くの操作を実行しようとしています。リモートシステムに必要な唯一の目的は、システムを実行することであり、他duには何もありません。

#!/bin/sh

while IFS=, read -r remote pathname user
do
    ssh -n -l "$user" "$remote" "df -h '$pathname'" |
    awk -v h="$remote" -v p="$pathname" '
        NR == 2 {
            if (($5 + 0) > 60)
                level="WARNING"
            else
                level="INFO"
        
            printf "%s: %s disk usage for %s on %s\n", level, $5, p, h
        }'
done <fi.csv >output.txt

ここでは、カンマで区切られた入力を読み、目的のパスをfi.csv呼び出し、ネイティブを使用して結果を解析します。出力はに記録されます。du -hawkoutput.txt

私たちはthisが2つの行を返すことを知っているので、コード内の2番目の行()にのみ興味を持ってdfください。次に、パーセンテージが60を超えるかどうかに応じてプレフィックスが付けられているか、現在のディスク使用率の割合を示すメッセージを出力します。awkNR == 2WARNINGINFO

関連情報