bash를 통해 반복적으로 이메일을 보내 사용자를 과도하게 참조하는 것을 방지하세요.

bash를 통해 반복적으로 이메일을 보내 사용자를 과도하게 참조하는 것을 방지하세요.

아이디어/구현을 개선하는 데 도움이 필요합니다. 시나리오는 소규모 로컬 ISP입니다. 사용자 계정은 freeradius/mysql에 저장됩니다. 할당된 할당량의 80%를 소비한 사용자에게 이메일을 보내는 작업입니다.

다운로드한 사용자에 대한 mysql 테이블을 확인하기 위해 1시간마다 실행되도록 예약된 bash 스크립트를 구성했습니다.75%할당량을 확인한 다음 사용자 이름과 이메일을 파일에 추가하세요./tmp/overquotauser.txt이와 같이

user1 [email protected]
user2 [email protected]
user3 [email protected]

사용자의 계정이 업데이트되면 해당 사용자의 이름이 계정에서 삭제됩니다./tmp/overquotauser.txt

이제 내가 원하는 것은 이들 사용자에게 이메일을 보내는 것입니다. 이것은 간단하지만, 제가 원하는 것은 매 시간마다 사용자에게 반복되는 이메일을 방지하는 것입니다. 예를 들어 사용자의 사용량이 80%인 경우 매시간이 아니라 사용자에게 이메일을 하나만 보내야 합니다. 이 작업을 수행하는 방법을 아시나요?

답변1

다음 두 가지 방법 중 하나를 사용할 수 있습니다.

I) 매 시간마다 파일을 생성합니다./tmp/overquotausernew.txt이 파일을 이전 파일과 비교하세요./tmp/overquotausernew.txt. 새로 생성된 파일에서 새로운 사용자가 발견되면 해당 사용자에게만 이메일을 보내고 새로 생성된 파일을 비교하십시오./tmp/overquotauser.txt

이렇게 하면 이메일이 전송되는 모든 사용자 이름이 포함된 하나의 파일만 유지하게 됩니다. 스크립트는 메일이 전송되지 않은 새 사용자를 확인합니다.

II) 메일이 보낸 사람인지 확인하도록 메일을 보내는 스크립트를 만들 수 있습니다./tmp/overquotauser.txt지난 24시간 이내에 전송되었습니다. 메시지가 지난 24시간 이내에 전송된 경우 스크립트는 다른 작업을 수행하지 않고 해당 사용자에게 메시지를 보냅니다.

답변2

이미 mysql에서 작업하고 있으므로 mysql 테이블을 사용할 수 있습니다! 이 정도 테이블이면 충분할 것 같아요 -

create table (
    userid varchar(100),
    useremail varchar(100),
    int mailsent default 0
);

작성자 작업은 이 테이블에서 행을 생성(또는 삭제)합니다. 메일 프로그램은 mailsent0으로 설정된 모든 줄을 추출하여 메일을 보내고 mailsent1로 설정합니다.

그러나 만약 당신이진짜,진짜,진짜텍스트 파일을 사용하고 싶습니다. 한 가지 방법이 있습니다.

  1. 작성자 크론 작업의 첫 번째 호출이 다음과 같이 파일을 생성한다고 가정합니다.

    user1,[email protected]
    user2,[email protected]
    user3,[email protected]
    
  2. 이제 메일러 작업이 실행되는 동안 이 파일에서 이메일 ID가 있는 행을 선택하고 수신자에게 메일을 보내고 해당 행에서 이메일 ID를 제거합니다. (이를 위해 Perl 또는 sed를 사용할 수 있습니다. 작성자는 동기식으로 파일에 씁니다.) 이 작업 후에 파일은 다음과 같습니다.

    user1
    user2
    user3
    
  3. 잠시 후 작성자는 user4와 user5라는 두 명의 사용자를 더 추가합니다. 이제 귀하의 파일은

    user1
    user2
    user3
    user4,[email protected]
    user5,[email protected]
    
  4. 메일러 작업이 다시 실행되면 2단계에서 이메일 ID가 0으로 지정된 사람에게만 이메일을 보냅니다.

이 모드는 여러 가지 방법으로 작동합니다.

답변3

한 가지 방법은 *nix 시스템에 내장된 quota도구를 사용하는 것입니다.여기.

Soft Limityes 800MBHard Limityes 인 경우 1000MB사용자는 이메일에 도달했을 때 이메일을 받게 되며 도달할 Soft Limit때까지 사용자는 계속 파일을 생성할 수 있습니다 .Hard Limit

:)

관련 정보