실시간으로 파일 수를 모니터링

실시간으로 파일 수를 모니터링

저는 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

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

답변1

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

#!/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분마다 또는 원하는 시간에 실행할 수 있습니다.

  • 행 수를 계산하고 이메일을 한 번 보내는 코드를 작성합니다. 매개변수를 설정하여 필요한 파일 수, 보낼 메시지 등을 지정할 수 있습니다. 간단하고 읽기 쉽습니다.

  • 실제 개수를 계산하려면 명령 -printf의 매개변수를 사용합니다 find. 파일당 하나의 개행 문자를 인쇄하고 개행 수를 계산하므로 모든 파일 이름을 처리할 수 있습니다.

  • GNU bash 가정.

관련 정보