Supondo que essas ferramentas estejam disponíveis para você, você poderia agrupar algo por meio de procmail
e cron
. Se não, qualquer coisa que possa executar comandos shell quando um e-mail específico chegar, poderá fazer algo muito semelhante.
Primeiro, configure uma regra do procmail (ou qualquer outra ferramenta de filtragem de mensagens usada) que corresponda aos e-mails que você deseja monitorar e touch
um arquivo de monitoramento. O c
sinalizador faz com que a regra processe uma cópia do e-mail e que o processamento continue mesmo se houver uma correspondência; Dessa forma, os e-mails não se perdem.
:0 c
*^Subject: Regular Report
| /usr/local/bin/regular-report-received.sh
Em seguida, escreva um script para touch
de um arquivo de propriedade do usuário, salvando-o como /usr/local/bin/regular-report-received.sh
neste caso:
#!/bin/bash
touch ~/.regular-report-received
(Isso pode ser feito dentro da regra do procmail, mas eu gosto de manter as coisas separadas, então lá vai.)
Em seguida, você precisará de um cron job que verifique regularmente se o arquivo foi tocado recentemente. Por exemplo, você poderia ter, para cada usuário:
@daily /usr/local/bin/is-regular-report-received.sh
Depois, há /usr/local/bin/is-regular-report-received.sh
, que segue as linhas de
#!/bin/bash
STALE_IF_BEFORE=$(date --date='-36 hours' +%s)
FILE_TIMESTAMP=$(stat -c '%Y' ~/.regular-report-received)
test "${FILE_TIMESTAMP}" -gt "${STALE_IF_BEFORE}" || printf 'Report not received!\n'
Com isso em vigor, cron
deve enviar um e-mail para cada usuário à meia-noite, caso não tenha recebido um relatório nas últimas 36 horas.
Ajuste a gosto.