- Mitglied seit
- 5 Dez 2005
- Beiträge
- 1,844
- Punkte für Reaktionen
- 0
- Punkte
- 36
Hallo Gemeinde,
editiert am 12.12.2010 - Update. Gesprächigkeit, besseres Killen, Mail-Parameter, Stopp bei fehlgeschlagener Reparatur.
Ich habe folgendes gerade zusammengestellt - es soll das Start/Stop Skript (SafeSkript) ergänzen.
Hintergrund - mein Asterisk wird in Stoßzeiten sehr oft mit "-rx BEFEHL" geöffnet und wieder geschlossen, da passiert es aktuell leider das er keine Remoteverbindungen via rx mehr zulässt, er schottet sich ab - dieses Problem behebt sich nicht automatisch und alle zukünftigen rx Kommandos gehen leider schief.
Diesem Skript ist es egal, warum der Asterisk nicht reagierte - es wird geholfen. Folgende Szenarien sollten damit abgedeckt sein :
- RX Zugang ist überlastet
- Asterisk friert ein
- Asterisk ist abgestürzt (wurde jedoch durch das Safe Skript nicht neu gestartet)
- Maschinenreboot ohne das safe_skript zu starten
Daher dieses Skript, vielleicht hilft es dem ein oder anderen? Über Feedback würde ich mich sehr freuen.
Viel Erfolg!
editiert am 12.12.2010 - Update. Gesprächigkeit, besseres Killen, Mail-Parameter, Stopp bei fehlgeschlagener Reparatur.
Ich habe folgendes gerade zusammengestellt - es soll das Start/Stop Skript (SafeSkript) ergänzen.
Hintergrund - mein Asterisk wird in Stoßzeiten sehr oft mit "-rx BEFEHL" geöffnet und wieder geschlossen, da passiert es aktuell leider das er keine Remoteverbindungen via rx mehr zulässt, er schottet sich ab - dieses Problem behebt sich nicht automatisch und alle zukünftigen rx Kommandos gehen leider schief.
Diesem Skript ist es egal, warum der Asterisk nicht reagierte - es wird geholfen. Folgende Szenarien sollten damit abgedeckt sein :
- RX Zugang ist überlastet
- Asterisk friert ein
- Asterisk ist abgestürzt (wurde jedoch durch das Safe Skript nicht neu gestartet)
- Maschinenreboot ohne das safe_skript zu starten
Daher dieses Skript, vielleicht hilft es dem ein oder anderen? Über Feedback würde ich mich sehr freuen.
Code:
#!/bin/bash
#
# Hobbystern aus dem IPPF im Dezember 2010
# Kleines Asterisk-Skript das Helfen soll einen nicht mehr reagierenden Asterisken neu zu starten, warum er nicht merh will soll uns egal sein.
# Ich gehe davon aus das Asterisk ueber safe_asterisk gestartet wurde.
# Es ist angedacht das auch dahdi bzw zapata von diesem skript geprueft wird, es wird jedoch keine aktion ausser einer mail ausgefuehrt.
# Bitte veraendere die Benutzervariablen nach Deinen Bedingungen!
#
# Anbei - dieses Skript eignet sich gut um im CRON zu starten, hier wird es alle 30 Minuten ausgefuehrt.
#
#
#
# Benutzervariablen setzen
# Hier bitte aendern!
#
ASTERISKPID=/var/run/asterisk.pid # Wo liegt die Asterisk PID Datei?
DAHDIPID=/var/run/dahdi.pid # Wo ist das PID fuer DAHDI - ACHTUNG - DAHDI hat anscheinend gar kein PID!
SAFESKRIPT=/etc/init.d/safe_asterisk # Der lange Name um das Start Skript in der Schleife aufzurufen!
SAFESKRIPTKURZ=safe_asterisk # Der Kurzname fuer die KILL Anweisungen des SAFE Skriptes
HOSTNAME=ASTERISK # Wie soll der Rechner heissen?
[email protected] # Wohin gehen Emails?
LOCKDATEI=/tmp/ASTERISK-ERROR # Die Sperrdatei inkl. Pfad, tritt ein Problem ein und kann es nicht behoben wereden, haelt es das Skript ab laufend zu reparieren
VERBOSE=no # Sollen Ausgaben bei der Verarbeitung gemacht werden? Startet man ueber Cron, so wird Cron dieses laufend per Mail melden!
#
# Ende der Benzervariablen
#
# Haben wir einen kritischen Zustand starten wir sicherheitshalber nicht mehr...
if [ -e ${LOCKDATEI} ]; then
echo "PANIK DATEI VORHANDEN"
echo "Start des Skriptes wurde durch die Datei ${LOCKDATEI} verhindert."
echo "Es gab anscheinend ein Problem, ist es behoben, so loeschen Sie die Datei ${LOCKDATEI}"
exit 1
fi
# Versuche die Verbindung zu Asterisk und DAHDI
ASTERISKALIVE=`/usr/sbin/asterisk -rx "dahdi show status" | grep "Unable to connect to remote"`
DAHDIALIVE=`/usr/sbin/asterisk -rx "dahdi show status" | grep "No such command"`
if [ ${ASTERISKALIVE} = ${LEER} ]; then
if [ ${VERBOSE} == "yes" ];then echo "Asterisk ist okay." ; fi
if [ ${DAHDIALIVE} = ${LEER} ]; then
if [ ${VERBOSE} == "yes" ];then echo "DAHDI-ZAP ist okay." ; fi
else
# Hier wird keine Aktion ausgefuehrt. Wird hier nicht benoetigt. Nur eine Mail.
if [ ${VERBOSE} == "yes" ];then echo "DAHDI-ZAP ist nicht okay! Aktion folgt." ; fi
mail -s "DAHDI ist auf ${HOSTNAME} nicht okay. PANIK!" ${EMAIL}
fi
else
if [ ${VERBOSE} == "yes" ];then echo "Asterisk und alle Komponenten sind nicht okay! Aktion folgt." ; fi
mail -s "ASTERISK ist auf ${HOSTNAME} nicht okay. Versuche Reparatur!" ${EMAIL}
killall ${SAFESKRIPTKURZ}
sleep 5
kill -INT `cat ${ASTERISKPID}`
sleep 5
if [ -e ${ASTERISKPID} ]; then
pkill -9 ${SAFESKRIPTKURZ}
sleep 2
kill -9 `cat ${ASTERISKPID}`
sleep 2
if [ ${VERBOSE} == "yes" ];then echo "Asterisk und das Safe Skript gekillt!" ; fi
else
if [ ${VERBOSE} == "yes" ];then echo "Asterisk nett gestoppt." ; fi
fi
if [ ${VERBOSE} == "yes" ];then echo "Neustart des Asterisken..." ; fi
${SAFESKRIPT}
sleep 5
if [ -e ${ASTERISKPID} ]; then
if [ ${VERBOSE} == "yes" ];then echo "Asterisk erfolgreich gestartet." ; fi
mail -s "ASTERISK wurde auf ${HOSTNAME} repariert..." ${EMAIL}
exit 0
else
if [ ${VERBOSE} == "yes" ];then echo "Asterisk konnte nicht starten...PANIK!" ; fi
echo "Panikdatei vorhanden : ${LOCKDATEI}. Skript darf nicht mehr starten!" | mail -s "ASTERISK wurde auf ${HOSTNAME} NICHT repariert. Brauche Hilfe!" ${EMAIL}
touch /tmp/ERROR
exit 1
fi
fi
Zuletzt bearbeitet: