bash +는 디스크 공간 사용량을 모니터링하고 공간 사용량이 임계값에 도달하면 스크립트를 실행합니다.

bash +는 디스크 공간 사용량을 모니터링하고 공간 사용량이 임계값에 도달하면 스크립트를 실행합니다.

우리는 파티션의 사용된 공간을 추적하고 싶습니다 /var/hadoop/hdfs. 사용된 공간이 더 많으면 50%스크립트를 실행합니다. do_action.bash마지막으로 이 명령은 crontab에 있어야 하며 1시간마다 실행되어야 합니다.

hdfs 파티션 예

df -Ph | grep 'hdfs'
/dev/sdc                     20G  1.7G   18G   9% /var/hadoop/hdfs

지금까지 우리가 한 일은 "run the script do_action.bash"임계값이 다음보다 큰 경우 다음 구문을 인쇄하는 것입니다.50%사용된,

df -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}'

하지만 스크립트 실행을 추가하는 방법 -do_action.bash

우리는 노력한다

df -Ph | grep 'hdfs' | sed s/%//g | awk '{ if($5 > 50) print "run the scriot do_action.bash"}' && bash /opt/do_action.bash

그러나 어떤 경우에도 스크립트가 - /opt/do_action.bash실행되므로 위의 내용은 올바르지 않습니다.

답변1

실행하여 해당 디렉터리의 출력을 df /path/to/directory얻을 수 있습니다. df예를 들어 내 시스템에서는 다음과 같습니다.

$ df -Ph /home/terdon
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p6  669G  186G  450G  30% /home

따라서 그럴 필요가 없습니다 grep hdfs. 직접 가져온 다음 두 번째 줄( NR==2awk)을 보면 헤더를 건너뛸 수 있습니다. 이를 염두에 두고 awk종료 상태를 설정 exit()하고 이를 일반 셸과 함께 사용하여 &&스크립트를 실행할 수 있습니다. 이 같은:

df -Ph /var/hadoop/hdfs | tr -d '%' | 
    awk 'NR==2{ exit $5>50 ? 0 : 1}' && /opt/do_action.bash

또는 더 짧게:

df -Ph /var/hadoop/hdfs | awk 'NR==2{exit ((0+$5) <= 50)}' && /opt/do_action.bash

&&"이전 명령이 성공한 경우에만 다음 명령을 실행합니다"를 의미합니다. 보다 큰 경우 exit $5>50 ? 0 : 1awk 명령의 종료 코드를 0(성공)으로 설정하므로 스크립트는 다음과 같은 경우에만 실행됩니다.$550$5>50

다음은 좀 더 장황하지만 이해하기 쉬운 형식으로 작성된 첫 번째 awk 스크립트입니다.

awk '{ 
        if(NR==2){ 
            if($5>50){
              exitStatus=0
            }
            else{
               exitStatus=1
            }
            exit(exitStatus)
        }
    }'

관련 정보