fi.csv
有一个包含name
,的文件path
,superuser
我们可以通过它登录服务器。使用脚本检查磁盘使用百分比。 --- 并将其与给定阈值进行比较,应将数据存储在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。