zimbra-script/zimbra_clear_mail_queue.sh

49 lines
2.1 KiB
Bash
Raw Permalink Normal View History

2021-01-15 18:51:12 +03:00
#!/bin/bash
############################################################№
# Удаление из почтовой очереди сообщений зависших с ошибкой:
# "lost connection with 127.0.0.1"
#############################################################
# Автор: Сергей Калинин
# https://nuk-svk.ru
# svk@nuk-svk.ru
##############################################################################
# Количество сообщений после которого нужно бить тревогу
MESSAGE_COUNT=30
ZIMBRA_BIN_PATH="/opt/zimbra/common/sbin/"
ZABBIX_SENDER="/usr/bin/zabbix_sender"
MAIL_SERVER=${HOSTNAME}
TODAY=$(date +"%d")
# получаем список потребных сообщений из очереди
MESSAGE_LIST=$(${ZIMBRA_BIN_PATH}/postqueue -p | grep -A 1 -B 1 "lost connection with 127.0.0.1")
#MESSAGE_LIST=$(cat /tmp/queue | grep -A 1 -B 1 "lost connection with 127.0.0.1")
# считаем их количество иесли превышает установленное значение завершаем скрипт с ошибкой
MSG_COUNT=$(echo "${MESSAGE_LIST}" | cut -d " " -f 1 | grep -E "[A-Z0-9].+" | wc -l)
# отправлям данные в заббикс
${ZABBIX_SENDER} -c /etc/zabbix/zabbix_agentd.conf -s "${MAIL_SERVER}" -k queue.error.message.count -o $MSG_COUNT
if [ "${MSG_COUNT}" -ge "${MESSAGE_COUNT}" ]; then
echo "Many error messages"
exit 1
fi
# Удаление сообщений старше 1 дня
echo "${MESSAGE_LIST}" | while read LINE; do
MSG_DAY=$(echo ${LINE} | grep -E "^[A-Z0-9].+" | awk '{print $3,$4,$5,$6}')
if [[ -n ${MSG_DAY} ]]; then
# определяем дату (число) сообщения
MSG_DAY=$(date -d "$(echo ${LINE} | grep -E "^[A-Z0-9].+" | awk '{print $3,$4,$5,$6}')" +%d)
#echo $MSG_DAY
if [ ${MSG_DAY} != ${TODAY} ]; then
MESSAGE_ID=$(echo "${LINE}" | cut -d " " -f 1 | grep -E "[A-Z0-9].+")
# echo "$MSG_DAY $MESSAGE_ID"
# Delete messages
${ZIMBRA_BIN_PATH}/postsuper -d $MESSAGE_ID
fi
fi
done