evita e-mails repetidos via bash para transmitir o usuário

0

Preciso de ajuda para melhorar a ideia / implementação. O Cenário é o mini ISP local. as contas de usuários são armazenadas em freeradius / mysql. A tarefa é enviar e-mail do usuário que consumiu 80% da cota atribuída.

Eu configurei script bash programado executado após cada 1 hora, que verifica os usuários na tabela mysql que baixaram 75% da cota atribuída a eles e então adicionam nome de usuário e email a um arquivo < strong> /tmp/overquotauser.txt como este

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

Quando a conta do usuário é renovada, seu nome é removido do /tmp/overquotauser.txt

Agora o que eu quero é enviar e-mail para esses usuários, é fácil, mas o que eu quero é evitar o envio de e-mails repetidos para o usuário a cada hora. Exemplo é se um usuário consumiu 80%, então apenas um e-mail deve ser enviado para o usuário e não a cada hora. alguma ideia de como isso pode ser feito?

    
por Syed Jahanzaib 03.08.2015 / 06:18

3 respostas

0

Você pode usar uma tabela mysql para isso, já que você já está trabalhando no mysql! Uma tabela como essa deve ser suficiente -

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

Seu trabalho de criador criará (ou excluirá) linhas dessa tabela. O seu mailer irá puxar todas as linhas com mailsent definido como 0, enviar e-mail e definir mailsent como 1.

No entanto, se você realmente , realmente , realmente quer usar o arquivo de texto - aqui está uma abordagem -

  1. Digamos que a primeira chamada da sua tarefa do criador cron crie um arquivo como este -

    user1,[email protected]
    user2,[email protected]
    user3,[email protected]
    
  2. Agora, em algum momento, a tarefa do seu mailer será executada, ele selecionará as linhas desse arquivo que possuem o emailid, enviarão os destinatários e removerão os IDs de email nessas linhas. (Você pode usar perl ou sed para isso - tenha cuidado com a gravação síncrona deste arquivo do criador) após esta operação, seu arquivo se tornará

    user1
    user2
    user3
    
  3. Depois de algum tempo, seu criador adiciona mais dois usuários, usuário4 e usuário5. Seu arquivo agora se torna

    user1
    user2
    user3
    user4,[email protected]
    user5,[email protected]
    
  4. Quando a tarefa do programa de correio for executada novamente, ela será enviada apenas por e-mail para pessoas que possuam IDs de e-mail especificados como 0 na etapa 2.

Existem várias formas de funcionamento deste esquema.

    
por 04.08.2015 / 05:15
1

Você pode usar qualquer uma das duas abordagens a seguir.

I) A cada hora, crie um arquivo /tmp/overquotausernew.txt e compare esse arquivo com o arquivo antigo /tmp/overquotausernew.txt . Se algum novo usuário for encontrado no arquivo recém-criado, envie um e-mail apenas para esses usuários e mescle o arquivo recém-criado com /tmp/overquotauser.txt

Dessa forma, você manterá apenas um arquivo com todos os nomes de usuários para os quais o email será enviado. E o script chk para qualquer novo usuário para o qual o e-mail não é enviado.

II) Você pode criar um script para enviar e-mails, de modo que ele verifique se o e-mail para um usuário específico de /tmp/overquotauser.txt é enviado ou não nas últimas 24 horas. Se o e-mail for enviado nas últimas 24 horas, o script não fará mais nada e enviará um e-mail para esse usuário.

    
por 03.08.2015 / 08:47
0

Uma maneira seria usar as ferramentas quota dos sistemas * nix ... como de aqui .

Se Soft Limit for 800MB e Hard Limit for 1000MB , o usuário será enviado por e-mail quando Soft Limit for atingido, permitindo que o usuário ainda crie arquivos até que Hard Limit seja atingido.

:)

    
por 03.08.2015 / 07:52