실시간 파일 수 모니터링

Oct 30 2020

나는 bash 스크립팅을 처음 사용하고 특정 수의 파일이 시간 프레임 내에 전송 될 (예상되는) 경로를 모니터링하는 bash 스크립트를 작성하려고합니다. 오전 9 시부 터 오전 11 시까 지 올 것으로 예상되는 20 개의 파일이 있다고 가정 해 보겠습니다.

스크립트는 다음을 수행 할 수 있어야합니다.

  • 파일이 소스에서 늦었는지 감지합니다. 오전 9시에 경로가 비어있는 경우 10 분의 유예 기간을 제공하고 소스가 파일을 늦게 전송한다는 이메일 알림을 보냅니다.
  • 시간 프레임 내에 파일 세트가 불완전한 지 감지합니다. 10 분의 유예 기간을 제공하고 파일 수가 여전히 20 개가 아니면 파일 세트가 불완전하다는 이메일 알림을 보냅니다.
  • 문제가 감지되지 않으면 확인 이메일을 보냅니다.

나는 incrontab에서 이것을 설정하려고 생각하고 있습니다. 스크립트는 파일 수가 완료되거나 오전 11시 10 분 (유예 기간 10 분)이 지난 경우에만 중지됩니다.

처음 두 가지를 달성하는 방법에 대한 조언이 필요합니다. 문제가 없을 것으로 예상되는 경우 만 다룰 수있었습니다. 나는 아이디어가 있지만 그것을 스크립트에 넣는 방법을 모릅니다.

지금까지 이것이 내가 가진 것입니다.

버전 1 :

#!/bin/bash

hour=(9 10 11)
[email protected]
[email protected]

if [[ "${hour[@]}" =~ "$(date +"%H")" ]]; then
   if [[ $(ls /fake/path | wc -l) == 20 ]]; then echo -e "All files received" | mailx -s "All files received" -r $server $notify
   fi
fi

( ls출력 구문 분석을 권장하지 않기 때문에 아래 스크립트를 업데이트했습니다.) :
버전 2 :

#!/bin/bash

hour=(9 10 11)
[email protected]
[email protected]

if [[ "${hour[@]}" =~ "$(date +"%H")" ]]; then echo $(date +"%Y-%m-%d %H:%M:%S") $1 >> /tmp/record.txt if [[ $(cat /tmp/record.txt | wc -l) == 20 ]]; then
      echo -e "All files received" | mailx -a /tmp/record.txt -s "All files received" -r $server $notify
   fi
fi

어떤 아이디어라도 환영합니다. 나는 이것을 잘못된 방식으로 보는 것일 수 있습니다.

답변

thanasisp Oct 31 2020 at 23:45

간단한 cron작업으로 할 수 있습니다 . 09:10파일 수가 0이면 확인하고 메일 알림을 보내고 11:10파일 수가 20 미만이면 at을 확인하고 싶다고 가정 해 보겠습니다 . 다음과 같은 스크립트를 사용하십시오.

#!/bin/bash

n="$1" message="$2"
target_dir="/full/path/to/directory"

cnt=$(find "$target_dir" -type f -printf '\n' | wc -l)

if (( cnt < n )); then
    <your-mail-command-with-$message>
else
    <do-anything>
fi

보시다시피 파일 수를 테스트하는 값과 메시지는 인수입니다. 그래서 당신은 할 수 있습니다

crontab -e

이 줄을 추가

10 9 * * * bash /full/path/to/the/scipt.sh 1 "No files yet"
10 11 * * * bash /full/path/to/the/scipt.sh 20 "Files less than 20"

파일을 저장하십시오. 이제 새로운 crontab이 설치되었습니다.


노트:

  • 실행 시간과 시간은 쉽게 사용자 정의 할 수 있습니다. 최소한의 노력으로 두 번 또는 N 분마다 또는 원할 때마다 실행할 수 있습니다.

  • 줄을 세고 메일을 한 번 보내는 코드를 작성합니다. 예상되는 파일 수, 보낼 메시지 등에 대한 매개 변수를 만들 수 있습니다. 간단하고 읽기 쉽습니다.

  • 실제 개수 -printffind명령 의 매개 변수를 사용합니다 . 모든 파일에 대해 개행 만 인쇄하고 개행을 계산하므로 모든 파일 이름이 처리됩니다.

  • GNU bash가 가정했습니다.