使用 % 检查特定服务器的路径,如果大于文件中存储的路径,则与阈值进行比较

使用 % 检查特定服务器的路径,如果大于文件中存储的路径,则与阈值进行比较

fi.csv有一个包含name,的文件pathsuperuser我们可以通过它登录服务器。使用脚本检查磁盘使用百分比。 --- 并将其与给定阈值进行比较,应将数据存储在main.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 -h我们感兴趣的路径,然后使用 本地解析该结果awk。输出写入到output.txt.

我们知道我们将从 中返回两行df,因此我们让awk代码只关心第二行 ( NR == 2)。然后,我们输出一条消息,显示当前磁盘使用百分比,前缀为WARNING或 ,INFO具体取决于百分比是否超过 60。

相关内容