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
우리는 this 에서 두 개의 행을 반환할 것임을 알고 있으므로 코드에서 두 번째 행( )에만 관심을 갖도록 df
합니다 . 그런 다음 백분율이 60을 초과하는지 여부에 따라 접두어가 붙 거나 현재 디스크 사용량 백분율을 보여주는 메시지를 출력합니다 .awk
NR == 2
WARNING
INFO