Criando notificação de alerta se o processo parar de tocar em arquivo

0

Eu configurei um script muito simples para que eu possa testar se um processo está sendo executado ou não e, em caso afirmativo, ele tocará em um arquivo e tudo ficará bem. No entanto, se o processo não estiver em execução e o arquivo não for tocado, quero poder configurar um alerta.

pgrep "dormir" > / dev / null & & touch monitor.log

Este script está sendo executado em um crontab a cada minuto. Eu preciso de uma maneira de alertar se o arquivo não foi tocado? Isso é possível?

Obrigado

    
por MrBburn 30.11.2016 / 19:39

1 resposta

0

Esta é uma verificação simples de tempo de modificação de arquivo; as complicações surgem principalmente da possibilidade de até 86.400 alertas por dia (geralmente durante um feriado prolongado é quando esses tipos de coisa quebram), e complicações adicionais de se ou não o verificador de tempo de modificação (ou cron, ou o sistema .. .) estão realmente rodando, se o clock do host está correto (tempo distorcido em virts, clock do BIOS chegando quatro anos no futuro, NTP quebrado, etc).

#!/bin/sh

# what we're checking for mtime changes straying from the current system time
MONITOR=foofile
THRESHOLD=60

# use mtime on this file to avoid frequent alert spam should the above stop
# being updated
LAST_ALERT=barfile
LAST_ALERT_THRESHOLD=60

NOW_MTIME='date +%s'

absmtimedelta() {
    delta='expr $NOW_MTIME - $1'
    # absolute delta, in the event the mtime is wrong on the other side of
    # the current time
    echo $delta | tr -d -
}

alertwithlesscronspam() {
    msg=$1
    if [ ! -f "$LAST_ALERT" ]; then
        # party like it's
        touch -t 199912312359 -- "$LAST_ALERT"
    fi
    # KLUGE this stat call is unportable, but that's shell for you
    last_mtime='stat -c '%Y' -- "$LAST_ALERT"'
    last_abs_delta='absmtimedelta $last_mtime'
    if [ $last_abs_delta -gt $LAST_ALERT_THRESHOLD ]; then
        # or here instead send smoke signals, carrier pigeon, whatever
        echo $msg
        touch -- "$LAST_ALERT"
        exit 1
    fi
}

if [ ! -r "$MONITOR" ]; then
    alertwithlesscronspam "no file alert for '$MONITOR'"
fi

MONITOR_MTIME='stat -c '%Y' -- "$MONITOR"'
ABS_DELTA='absmtimedelta $MONITOR_MTIME'

if [ $ABS_DELTA -gt $THRESHOLD ]; then
    alertwithlesscronspam "mtime alert for '$MONITOR': $ABS_DELTA > $THRESHOLD"
fi

Talvez, em vez disso, considere uma estrutura de monitoramento padrão , que pode ter suporte para verificações de tempo de modificação de arquivo ou um plug-in para faça isso, alertas personalizáveis, métricas, código melhor que o acima, etc.

    
por 30.11.2016 / 20:32