Thank you for reading this post, don't forget to subscribe!
Данный скрипт выполняется каждый час(по крону) и собирает лог за последний час(по скрипту) дальше грепает все ошибки, + находит не локальные доставки и о них также уведомляет на почту:
[codesyntax lang="bash"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/bash email_send='mid@test.local' mail_log='/var/log/maillog' home_dir='/etc/postfix/dir_for_skript_error_mail_report' smtp_host='192.168.1.170' # определяем все сообщения с ошибками за последний час awk -v d1="$(date --date="-60 min" "+%b %_d %H:%M")" -v d2="$(date "+%b %_d %H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' $mail_log | grep -iE 'fatal|error|warning|deferred|bounced|expired|NOQUEUE|reject|denied' > $home_dir/error_in_maillog # производим отправку, проверяя не пустой ли файл if [[ -s $home_dir/error_in_maillog ]]; then cat $home_dir/error_in_maillog | /usr/bin/mail -s "MAIL ERROR in log MGW `date +%d-%m-%Y`" -r $email_send -S smtp="$smtp_host" $email_send cat /dev/null > $home_dir/error_in_maillog fi # Проверка на наличие в получателях внешних мыльников awk -v d1="$(date --date="-60 min" "+%b %_d %H:%M")" -v d2="$(date "+%b %_d %H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' $mail_log | grep -vE 'test.ru|test.local' | grep 'to=' > $home_dir/mail_not_for_local_deliver if [[ -s $home_dir/mail_not_for_local_deliver ]]; then cat $home_dir/mail_not_for_local_deliver | /usr/bin/mail -s "MAIL not for local delivery `date +%d-%m-%Y`" -r $email_send -S smtp="$smtp_host" $email_send cat /dev/null > $home_dir/mail_not_for_local_deliver fi |
[/codesyntax]
crontab -l
0 * * * * /usr/bin/bash /etc/postfix/dir_for_skript_error_mail_report/3_skript_message_error_report.sh