Em vez de olhar para os registros, pergunte diretamente a asterisk
quais extensões não são aceitáveis
asterisk -rx 'sip show peers like ^[0-9]{4}$' | awk 'NR>1 && !/ OK /'
Informaria as extensões de 4 dígitos que não são "OK".
Existe alguma maneira de escrever um bash que possa me notificar por e-mail quando minhas extensões de telefone estiverem inacessíveis?
Saída de /var/log/asterisk/full
[Nov 15 13:25:16] NOTICE[7884] chan_sip.c: Peer '7778' is now UNREACHABLE! Last qualify: 17
[Nov 15 13:25:17] NOTICE[7884] chan_sip.c: Peer '7169' is now UNREACHABLE! Last qualify: 17
[Nov 15 13:25:17] NOTICE[7884] chan_sip.c: Peer '7176' is now UNREACHABLE! Last qualify: 18
[Nov 15 13:25:18] NOTICE[7884] chan_sip.c: Peer '7771' is now UNREACHABLE! Last qualify: 14
[Nov 15 13:25:18] NOTICE[7884] chan_sip.c: Peer '7606' is now UNREACHABLE! Last qualify: 17
[Nov 15 13:25:18] NOTICE[7884] chan_sip.c: Peer '7773' is now UNREACHABLE! Last qualify: 14
[Nov 15 13:25:19] NOTICE[7884] chan_sip.c: Peer '7125' is now UNREACHABLE! Last qualify: 15
[Nov 15 13:25:20] NOTICE[7884] chan_sip.c: Peer '7772' is now UNREACHABLE! Last qualify: 15
[Nov 15 13:25:22] NOTICE[7884] chan_sip.c: Peer '7605' is now UNREACHABLE! Last qualify: 16
[Nov 15 13:25:22] NOTICE[7884] chan_sip.c: Peer '7183' is now UNREACHABLE! Last qualify: 18
[Nov 15 13:25:29] NOTICE[7884] chan_sip.c: Peer '7601' is now UNREACHABLE! Last qualify: 24
[Nov 15 13:25:30] NOTICE[7884] chan_sip.c: Peer '7776' is now UNREACHABLE! Last qualify: 47
[Nov 15 13:25:32] NOTICE[7884] chan_sip.c: Peer '7604' is now UNREACHABLE! Last qualify: 25
[Nov 15 13:25:34] NOTICE[7884] chan_sip.c: Peer '7774' is now UNREACHABLE! Last qualify: 46
[Nov 15 13:25:38] NOTICE[7884] chan_sip.c: Peer '7770' is now UNREACHABLE! Last qualify: 41
[Nov 15 13:25:41] NOTICE[7884] chan_sip.c: Peer '7775' is now UNREACHABLE! Last qualify: 42
Como você pode ver, não sei se os telefones estão desligados até as pessoas reclamarem que não podem fazer uma ligação telefônica.
O que eu fiz até agora:
#!/bin/bash
email="[email protected]"
offlineExtensions=$(cat /var/log/asterisk/full | grep -i unreachable)
if [ "$offlineExtensions" ]
then
printf 'Extensions that are currently offline...\n''\n'"$offlineExtensions" | mail -s 'Extensions OFFLINE' "$email"
fi
Gostaria de usar sed
e awk
, mas sou novato no script do bash.
Seria bom se este script estivesse constantemente verificando o Asterisk log file
para descobrir se uma extensão está inacessível.
Este é um one-liner
simples que pode fazer o que você quer:
tail -F /var/log/asterisk/full | while read -r line; do if [[ "$line" == *NREACHABLE* ]]; then mail -s "$line" [email protected] </dev/null ; fi; done
Execute isso em screen
ou tmux
.
Ou:
#!/bin/bash
while read -r line
do if [[ "$line" == *NREACHABLE* ]]; then
mail -s "$line" [email protected] </dev/null
fi
done < <(tail -F /var/log/asterisk/full)
O script abaixo pode fazer o que você está procurando. Eu usei sendmail
para enviar notificações por email.
Defina este script para ser executado como um trabalho cron
, ele verificará se há extensões inacessíveis e enviará notificações por e-mail quando extensões inacessíveis forem > 0
#!/bin/bash
email="[email protected]"
/usr/sbin/asterisk -rx 'sip show peers' > /tmp/allExtensions.txt
offlineExtensions='cat /tmp/allExtensions.txt| grep 'UNREACHABLE''
count='cat /tmp/allExtensions.txt | wc -l'
if [ $count -gt 0 ]; then
(
echo "Subject: Offline Extensions"
printf 'Extensions that are currently offline...\n''\n'"${offlineExtensions}"
) | /usr/sbin/sendmail ${email}
fi
Tags asterisk shell-script