![]() ![]() | ![]() |
Correction of sent messages to all english.
1: #!/bin/bash 2: 3: # canardien 0.0.3 4: # (c) 2005 under GPL by Adrian Zaugg 5: 6: # canardiens pings ente.limmat.ch to determine wether she is gone diving. 7: 8: # ToDo: multi host, multi eMail 9: 10: ## Settings 11: # 12: 13: # Host to ping. It's ente.limmat.ch 14: HOST="ente.limmat.ch" 15: 16: # eMail Alerts 17: # Send alert email messages to the following address(es). Leave empty 18: # for no alert. For multiple destinations use a comma separated list. 19: ALERT_TO="root" 20: 21: # Subject of alert email 22: ALERT_SUBJECT="Attention: no answer from $HOST anymore!" 23: 24: # Text of Message (But in 'single quotes' to protect variables. They should get 25: # expanded at the time the message is sent!) 26: ALERT_TEXT='"\n[$TIME_STAMP]\n\nALERT!!\n\n\t$HOST is down!\n\nYou should probably do something, please.\n\nKind regards, $PINGHOST."' 27: 28: # path to fping 29: PING=`which fping` 30: 31: # answer of fping to reachable hosts 32: ALIVE_ANSWER="is alive" 33: 34: # Temporary file path 35: TMPDIR="/tmp" 36: 37: # This hosts name 38: PINGHOST=`uname -n` 39: 40: # set to an empty string to avoid debug output, 41: # to "low" for a few, output and to anything else 42: # for verbose output 43: DEBUG=loud 44: 45: # for silent (non-error) operation set to anything, 46: # comment out to enable text output 47: # (migration to use shout is in progress) 48: SILENT=shshsh 49: 50: 51: # -----------functions----------- 52: 53: # If ente.limmat.ch responds to pings, she is considered up. 54: function checkconnection { 55: unset UP 56: if [ ${#PING} -eq 0 ]; then 57: echo "Error: fping external program not in path. Exitting." 58: exit 1 59: fi 60: 61: PING_ANSWER="$($PING "$HOST")" 62: PING_ERRNUM=$? 63: if [ $PING_ERRNUM -gt 2 ]; then 64: echo "Error $PING_ERRNUM in fping $(head -1 "$PING_ANSWER") . Exitting." 65: exit 1 66: fi 67: 68: if [ `echo "$PING_ANSWER" | grep -c "$ALIVE_ANSWER"` -gt 0 ]; then 69: UP=true 70: fi 71: TIME_STAMP=`date +"%a %e.%m.%y %H:%M:%S"` 72: if [ -n "$UP" ]; then 73: if [ ! "$DEBUG" = "low" ] && [ -n "$DEBUG" ]; then 74: shout "The connection is up." 75: fi 76: else 77: if [ -n "$DEBUG" ]; then 78: shout "The connection is down." 79: fi 80: fi 81: } 82: 83: # Rember recent state of ente.limmat.ch, trigger alert 84: function rememberstate { 85: # Put a simple time stamp in a tmp file, when host gets down 86: if [ -z "$UP" ]; then 87: if [ ! -e "$TMPDIR/.canardien-$PINGHOST-$HOST" ]; then 88: # set time stamp 89: echo -ne "$TIME_STAMP" > "$TMPDIR/.canardien-$PINGHOST-$HOST" 90: # send alert 91: sendalert 92: elif [ -n "$DEBUG" ]; then 93: shout "Down since `cat $TMPDIR/.canardien-$PINGHOST-$HOST`." 94: fi 95: else 96: # Host is up 97: if [ -e "$TMPDIR/.canardien-$PINGHOST-$HOST" ]; then 98: if [ -n "$DEBUG" ]; then 99: shout "$HOST is up again." 100: fi 101: # send alert 102: ALERT_SUBJECT="The host $HOST answers again!!" 103: ALERT_TEXT='"[$(date +"%a %e.%m.%y %H:%M:%S")]\n\n\n$HOST is up again.\n--------------------------------------\n(downtime began $(cat "$TMPDIR/.canardien-$PINGHOST-$HOST"))\n\n\n Kind regards, $PINGHOST."' 104: sendalert 105: # delete tmp file 106: rm "$TMPDIR/.canardien-$PINGHOST-$HOST" 107: else 108: # still running 109: if [ ! "$DEBUG" = "low" ] && [ -n "$DEBUG" ]; then 110: shout "$HOST is still up." 111: fi 112: fi 113: fi 114: } 115: 116: # Send an email alert 117: function sendalert { 118: # send mail 119: if [ ! -z "$ALERT_TO" ]; then 120: eval MSG=\$$ALERT_TEXT 121: echo -e -n "$MSG" | mail -s "$ALERT_SUBJECT" "$ALERT_TO" 122: if [ -n "$DEBUG" ]; then 123: shout "Alert sent to $ALERT_TO." 124: fi 125: fi 126: } 127: 128: # To avoid any output in case of a silent operation, 129: # shout instead of echo. 130: function shout() 131: { 132: if [ -z "$SILENT" ]; then 133: echo -e "$1" 134: fi 135: } 136: 137: 138: # -----------main----------- 139: 140: checkconnection 141: rememberstate 142: exit 0 143: 144: