Merge remote branch “origin/master”
This commit is contained in:
commit
6c660b941a
106
check-postfix.sh
Executable file
106
check-postfix.sh
Executable file
@ -0,0 +1,106 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
# BEGIN: Variables
|
||||||
|
## Duration to wait to see if service has come back up
|
||||||
|
DURATION=10
|
||||||
|
## Wait duration to send next part of message
|
||||||
|
WAIT=1
|
||||||
|
|
||||||
|
## Test flag
|
||||||
|
TEST=0
|
||||||
|
|
||||||
|
## Email addresses
|
||||||
|
NOTIFY_EMAIL=recipient@domain.com
|
||||||
|
MAIL_FROM=username@domain.net
|
||||||
|
DAMAIN=` echo $NOTIFY_EMAIL | cut -d @ -f 2 `
|
||||||
|
|
||||||
|
# END: Variables
|
||||||
|
|
||||||
|
|
||||||
|
# BEGIN: Helper Functions
|
||||||
|
|
||||||
|
send_email () {
|
||||||
|
local MESSAGE="${1:?"send_email: No message was passed through"}"
|
||||||
|
sendmail $NOTIFY_EMAIL <<< "$MESSAGE"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
: "
|
||||||
|
The only option is to manually telnet to the smtp port on the authoritative mailserver for the target domain. As otherwise unless a mail-host is configured for email proxy, you will be unable to send an email to a user outside of the mailservers domain (without authentication).
|
||||||
|
"
|
||||||
|
do_emergency_email () {
|
||||||
|
local MESSAGE="${1:-"The Postfix service has failed to come up on tartarus (192.168.3.2) after a service restart. Please ssh into server to troubleshoot the issues."}"
|
||||||
|
|
||||||
|
## Getting a mailserver IP for manual message
|
||||||
|
MAILSERVER=`dig $DOMAIN mx | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1`
|
||||||
|
|
||||||
|
## Setting up coprocess to send commands to telnet session
|
||||||
|
coproc TELNET { telnet $MAILSERVER 25; }
|
||||||
|
|
||||||
|
## Commands to send email manually
|
||||||
|
local -a commands=(
|
||||||
|
"ehlo camtel.net\n"
|
||||||
|
"mail from: <$MAIL_FROM>\n"
|
||||||
|
"rcpt to: <$NOTIFY_EMAIL>\n"
|
||||||
|
"data\n"
|
||||||
|
"Subject: Postfix Service Failure\nFrom: $MAIL_FROM\nTo: $NOTIFY_EMAIL\n"
|
||||||
|
"$MESSAGE\n\n.\n"
|
||||||
|
"quit\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
## Iterate through commands and send them to coprocesses
|
||||||
|
### We need to wait before each command as the remote mailserver will not catch everything otherwise.
|
||||||
|
for i in ${!commands[@]}; do
|
||||||
|
COMMAND="${commands[$i]}"
|
||||||
|
echo -e "$COMMAND" >&${TELNET[1]}
|
||||||
|
sleep $WAIT
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# END: Helper Functions
|
||||||
|
|
||||||
|
|
||||||
|
# BEGIN: Test Check
|
||||||
|
|
||||||
|
if [[ $TEST -eq 1 ]]; then
|
||||||
|
MESSAGE_1="
|
||||||
|
This is a test message to verify that postfix can send an email
|
||||||
|
"
|
||||||
|
send_email "$MESSAGE_1"
|
||||||
|
|
||||||
|
MESSAGE_2="This is a test email to make sure the postfix crash workaround email works"
|
||||||
|
|
||||||
|
do_emergency_email "$MESSAGE_2"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# END: Test Check
|
||||||
|
|
||||||
|
|
||||||
|
# BEGIN: Work
|
||||||
|
|
||||||
|
if [[ `systemctl is-active postfix` != 'active' ]]; then
|
||||||
|
systemctl restart postfix
|
||||||
|
|
||||||
|
sleep $DURATION
|
||||||
|
|
||||||
|
SERVICE_STATUS=` systemctl is-active postfix `
|
||||||
|
|
||||||
|
if [[ "$SERVICE_STATUS" == 'active' ]]; then
|
||||||
|
MESSAGE="
|
||||||
|
SUBJECT: Postfix Service Failure
|
||||||
|
FROM: root
|
||||||
|
TO: $NOTIFY_EMAIL
|
||||||
|
|
||||||
|
The postfix service on `hostname` (`hostname -i`) was found to be not running.
|
||||||
|
|
||||||
|
The service has been restarted, and after waiting $DURATION seconds it was found to be $SERVICE_STATUS.
|
||||||
|
"
|
||||||
|
send_email "$MESSAGE"
|
||||||
|
else
|
||||||
|
do_emergency_email
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# END: Work
|
Loading…
Reference in New Issue
Block a user