#!/bin/bash
#Maileinstellung -> benoetigt [apt-get install sendEmail]
SMTPFROM="`hostname`@fqdn.net"
SMTPTO='admin@fqdn.net'
SMTPSERVER='mail.fqdn.net'
SMTPUSER=''
SMTPPASS=''
HOST="host.ath.cx" # DynDNS Hostname
EVERY="300" # Zeit in Sekunden zwischen den Abfragen
###
CHECKIPURL="http://checkip.dyndns.org/"
CHECKIPURL2="http://www.myip.ch/"
srcn=$(basename $0)
if [ ! -f /usr/bin/sendEmail ] ; then
echo -e "\033[1;31mMailbenachrichtigung wurde aktiviert, jedoch ist sendEmail nicht installiert!\033[0m"
echo ""
exit 1
fi
get_IPs() {
HOSTIP=$(ping -c 1 "$HOST" | sed -n 1p | sed -e 's/(//g' -e 's/)//g' | awk '{ print $3 }')
wget -q --timeout=10 -O /tmp/_current_ip $CHECKIPURL
CURRENTIP=$(cat /tmp/_current_ip | cut -d ' ' -f 6 | cut -d '<' -f 1)
if [ -z "$CURRENTIP" -o "$CURRENTIP" = " *" -o "$CURRENTIP" = "*1.0 *" ]; then
if [ ! -z "$1" ]; then
echo "Hmm... $CHECKIPURL seems to be down?! Using: $CHECKIPURL2 insteed"
fi
wget -q -O /tmp/_current_ip $CHECKIPURL2
CURRENTIP=$(cat /tmp/_current_ip | cut -d ' ' -f 6 | cut -d '<' -f 1)
fi
}
update_interval() {
echo $(pidof -x $0) >/tmp/.$srcn.pid
while true; do
get_IPs
if [ "$HOSTIP" != "$CURRENTIP" ]; then
send_Email
fi
sleep $EVERY
done
}
send_Email() {
SUBJECT="IPC CS-Server IP change"
echo "`hostname -f` hat sich neu eingewaehlt und eine neue IP erhalten" >/tmp/mail
echo "" >>/tmp/mail
echo "DynDNS Hostname: $HOST" >>/tmp/mail
echo "DynDNS Host IP: $HOSTIP" >>/tmp/mail
echo "Current IP: $CURRENTIP" >>/tmp/mail
echo "" >>/tmp/mail
sed -e 's/$/\r/' /tmp/mail >/tmp/mail.txt
sendEmail -f $SMTPFROM -t $SMTPTO -u "$SUBJECT" -o m-file=/tmp/mail.txt -s $SMTPSERVER -xu $SMTPUSER -xp $SMTPPASS >/dev/null 2>&1
rm -f /tmp/mail && rm -f /tmp/mail.txt >/dev/null 2>&1
}
kill_script() {
counter="5"
PID=$(cat /tmp/.$srcn.pid)
if [ -z "$PID" ]; then
PID=$(pidof -x $srcn)
fi
if [ ! -z "$PID" ]; then
PID="$PID `pidof -x sleep`"
echo "PID: $PID"
kill -9 $PID >/dev/null 2>&1
echo "Killed $PID"
else
echo "Nothing to $1!"
fi
sleep 5
if [ ! -z `pidof -x sleep` ]; then
while [ $counter -gt 0 ]; do
echo "...Retrying to kill script! (retrys: $counter , PID: $PID)"
kill -9 $PID >/dev/null 2>&1
PID=$(pidof -x $srcn)
PID="$PID `pidof -x sleep`"
counter=`expr $counter - 1`
done
fi
echo "Should be killed..."
rm -f /tmp/.$srcn.pid
}
case "$1" in
"")
update_interval
;;
auto)
$0 &
;;
stop|kill)
kill_script $1
;;
now)
get_IPs
echo "HOST: $HOST - HOSTIP: $HOSTIP - CURRENTIP: $CURRENTIP"
echo "Verschicke Email..."
send_Email
echo "done"
;;
help|hilfe|?)
echo "Usage: $0 [now|auto|kill|help]"
echo "$0 now -> Sofortiges abfragen und sendern der Email"
echo "$0 auto -> Überprüft/updated $HOST alle $EVERY Sekunden"
echo "$0 kill -> Script wird beendet"
echo "$0 help -> Zeigt diese Hilfr..."
;;
*)
echo "Usage: $0 [now|auto|kill|help]"
;;
esac
exit 0