public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Update] Remove obsolete parameters [Compose] New watchdog image [Watchdog] Allow multiple rcpts separated by comma
c9cf3476
data/Dockerfiles/watchdog/watchdog.sh | 59 +++++++++++++++++++----------------
docker-compose.yml | 2 +-
generate_config.sh | 2 ++
update.sh | 10 ------
4 files changed, 35 insertions(+), 38 deletions(-)
Diff
diff --git a/data/Dockerfiles/watchdog/watchdog.sh b/data/Dockerfiles/watchdog/watchdog.sh
index bedbc882..ccb88c67 100755
--- a/data/Dockerfiles/watchdog/watchdog.sh
+++ b/data/Dockerfiles/watchdog/watchdog.sh
@@ -42,24 +42,29 @@ log_msg() {
function mail_error() {
[[ -z ${1} ]] && return 1
- [[ -z ${2} ]] && return 2
- [[ -z ${3} ]] && BODY="Service was restarted on $(date), please check your mailcow installation." || BODY="$(date) - ${3}"
- RCPT_DOMAIN=$(echo ${1} | awk -F @ {'print $NF'})
- RCPT_MX=$(dig +short ${RCPT_DOMAIN} mx | sort -n | awk '{print $2; exit}')
- if [[ -z ${RCPT_MX} ]]; then
- log_msg "Cannot determine MX for ${1}, skipping email notification..."
- return 1
- fi
- [ -f "/tmp/${2}" ] && ATTACH="--attach /tmp/${2}@text/plain" || ATTACH=
- ./smtp-cli --missing-modules-ok \
- --subject="Watchdog: ${2} hit the error rate limit" \
- --body-plain="${BODY}" \
- --to=${1} \
- --from="watchdog@${MAILCOW_HOSTNAME}" \
- --server="${RCPT_MX}" \
- --hello-host=${MAILCOW_HOSTNAME} \
- ${ATTACH}
- log_msg "Sent notification email to ${1}"
+ [[ -z ${2} ]] && BODY="Service was restarted on $(date), please check your mailcow installation." || BODY="$(date) - ${2}"
+ WATCHDOG_NOTIFY_EMAIL=$(echo "${WATCHDOG_NOTIFY_EMAIL}" | sed 's/"//;s|"$||')
+ IFS=',' read -r -a MAIL_RCPTS <<< "${WATCHDOG_NOTIFY_EMAIL}"
+ for rcpt in "${MAIL_RCPTS[@]}"; do
+ RCPT_DOMAIN=
+ RCPT_MX=
+ RCPT_DOMAIN=$(echo ${rcpt} | awk -F @ {'print $NF'})
+ RCPT_MX=$(dig +short ${RCPT_DOMAIN} mx | sort -n | awk '{print $2; exit}')
+ if [[ -z ${RCPT_MX} ]]; then
+ log_msg "Cannot determine MX for ${rcpt}, skipping email notification..."
+ return 1
+ fi
+ [ -f "/tmp/${1}" ] && ATTACH="--attach /tmp/${1}@text/plain" || ATTACH=
+ ./smtp-cli --missing-modules-ok \
+ --subject="Watchdog: ${1} hit the error rate limit" \
+ --body-plain="${BODY}" \
+ --to=${rcpt} \
+ --from="watchdog@${MAILCOW_HOSTNAME}" \
+ --server="${RCPT_MX}" \
+ --hello-host=${MAILCOW_HOSTNAME} \
+ ${ATTACH}
+ log_msg "Sent notification email to ${rcpt}"
+ done
}
get_container_ip() {
@@ -312,7 +317,7 @@ Empty
while true; do
if ! nginx_checks; then
log_msg "Nginx hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "nginx-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "nginx-mailcow"
echo nginx-mailcow > /tmp/com_pipe
fi
done
@@ -323,7 +328,7 @@ BACKGROUND_TASKS+=($!)
while true; do
if ! mysql_checks; then
log_msg "MySQL hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "mysql-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "mysql-mailcow"
echo mysql-mailcow > /tmp/com_pipe
fi
done
@@ -334,7 +339,7 @@ BACKGROUND_TASKS+=($!)
while true; do
if ! phpfpm_checks; then
log_msg "PHP-FPM hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "php-fpm-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "php-fpm-mailcow"
echo php-fpm-mailcow > /tmp/com_pipe
fi
done
@@ -345,7 +350,7 @@ BACKGROUND_TASKS+=($!)
while true; do
if ! sogo_checks; then
log_msg "SOGo hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "sogo-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "sogo-mailcow"
echo sogo-mailcow > /tmp/com_pipe
fi
done
@@ -357,7 +362,7 @@ if [ ${CHECK_UNBOUND} -eq 1 ]; then
while true; do
if ! unbound_checks; then
log_msg "Unbound hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "unbound-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "unbound-mailcow"
echo unbound-mailcow > /tmp/com_pipe
fi
done
@@ -370,7 +375,7 @@ if [[ "${SKIP_CLAMD}" =~ ^([nN][oO]|[nN])+$ ]]; then
while true; do
if ! clamd_checks; then
log_msg "Clamd hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "clamd-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "clamd-mailcow"
echo clamd-mailcow > /tmp/com_pipe
fi
done
@@ -382,7 +387,7 @@ fi
while true; do
if ! postfix_checks; then
log_msg "Postfix hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "postfix-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "postfix-mailcow"
echo postfix-mailcow > /tmp/com_pipe
fi
done
@@ -393,7 +398,7 @@ BACKGROUND_TASKS+=($!)
while true; do
if ! dovecot_checks; then
log_msg "Dovecot hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "dovecot-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "dovecot-mailcow"
echo dovecot-mailcow > /tmp/com_pipe
fi
done
@@ -404,7 +409,7 @@ BACKGROUND_TASKS+=($!)
while true; do
if ! rspamd_checks; then
log_msg "Rspamd hit error limit"
- [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "${WATCHDOG_NOTIFY_EMAIL}" "rspamd-mailcow"
+ [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]] && mail_error "rspamd-mailcow"
echo rspamd-mailcow > /tmp/com_pipe
fi
done
diff --git a/docker-compose.yml b/docker-compose.yml
index f72ad505..99a7ba42 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -338,7 +338,7 @@ services:
- /lib/modules:/lib/modules:ro
watchdog-mailcow:
- image: mailcow/watchdog:1.26
+ image: mailcow/watchdog:1.27
# Debug
#command: /watchdog.sh
build: ./data/Dockerfiles/watchdog
diff --git a/generate_config.sh b/generate_config.sh
index 25faf22b..243b513e 100755
--- a/generate_config.sh
+++ b/generate_config.sh
@@ -125,6 +125,8 @@ SKIP_CLAMD=n
# Enable watchdog (watchdog-mailcow) to restart unhealthy containers (experimental)
USE_WATCHDOG=n
# Send notifications by mail (no DKIM signature, sent from watchdog@MAILCOW_HOSTNAME)
+# Can by multiple rcpts, NO quotation marks
+#[email protected],[email protected],[email protected]
#WATCHDOG_NOTIFY_EMAIL=
# Max log lines per service to keep in Redis logs
diff --git a/update.sh b/update.sh
index 3485cf87..2352fe6a 100755
--- a/update.sh
+++ b/update.sh
@@ -114,7 +114,6 @@ CONFIG_ARRAY=(
"LOG_LINES"
"SNAT_TO_SOURCE"
"SNAT6_TO_SOURCE"
- "SYSCTL_IPV6_DISABLED"
"COMPOSE_PROJECT_NAME"
"SQL_PORT"
"API_KEY"
@@ -129,15 +128,6 @@ for option in ${CONFIG_ARRAY[@]}; do
echo "Adding new option \"${option}\" to mailcow.conf"
echo "${option}=" >> mailcow.conf
fi
- elif [[ ${option} == "SYSCTL_IPV6_DISABLED" ]]; then
- if ! grep -q ${option} mailcow.conf; then
- echo "Adding new option \"${option}\" to mailcow.conf"
- echo "# Disable IPv6" >> mailcow.conf
- echo "# mailcow-network will still be created as IPv6 enabled, all containers will be created" >> mailcow.conf
- echo "# without IPv6 support." >> mailcow.conf
- echo "# Use 1 for disabled, 0 for enabled" >> mailcow.conf
- echo "SYSCTL_IPV6_DISABLED=0" >> mailcow.conf
- fi
elif [[ ${option} == "COMPOSE_PROJECT_NAME" ]]; then
if ! grep -q ${option} mailcow.conf; then
echo "Adding new option \"${option}\" to mailcow.conf"