%를 사용하여 특정 서버에 대한 경로를 확인하고 파일에 저장된 경로보다 큰 경우 임계값과 비교합니다.

%를 사용하여 특정 서버에 대한 경로를 확인하고 파일에 저장된 경로보다 큰 경우 임계값과 비교합니다.

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

관련 정보