mail-benachrichtigung bei Asteriskabsturz/Neustart --vServer

chocoa

Neuer User
Mitglied seit
3 Mrz 2005
Beiträge
34
Punkte für Reaktionen
0
Punkte
0
Hallo Asteriskgemeinde,

ich habe um den Asterisk automatisch beim booten des vServer zu starten in der inittab folgendes eingefügt:

ax:2345:respawn:/usr/sbin/asterisk -vvvcf
-->funktioniert leider irgendwie nicht, muss immer noch per Hand den Server starten.

Jetzt würde ich gerne via e-mail informiert werden wann der Asterisk neu gestartet wurde bzw wenn möglich, wenn er sich aufgehangen hat.
Dies muss man ja bestimmt in /usr/sbin/safe_asterisk konfigurieren.
Ich habe einfach das "#" vor NOTIFY weggenommen und meine mailadresse deklariert. Anschließende habe ich Asterisk mit stop now beendet und den vServer via Webfrontend neu gestartet. Das Problem ist nur ich bekomme keine mail über diesen Vorfall zugesendet.
Mailserver funktioniert, weil meine Voicemails bekomme ich ja auch.
Muss ich da noch wo was konfigurieren ?

Danke
Marc
 
ich habe das bei allen meinen vServern anders gelöst:

Beim Start des vServers wird der Asterisk einfach über ein simples Startup-Skript in /etc/init.d (mit symbolischem Link nach /etc/rc2.d) gestartet.

Und über einen Cronjob wird der Asterisk jede Nacht um 04:05 Uhr neu gestartet. Seither hatte ich keine Asterisk-Abstürze mehr und die Sache läuft superstabil.
 
danke @betateilchen für die Scriptidee. Ist ja wirklich ziemlich easy.
Asterisk startet jetzt bei Neustart automatisch.

Was muss ich tun damit der komplette vServer einmal pro Woche neu startet?
Ich denke mal ich muss irgend ein ähnliches Script wie:

10 7 * * * root /usr/sbin/asterisk -r -x "restart gracefully" >/dev/null 2>&1

in den Ordner /etc/cron.weekly legen, oder ?
Was heißt eigentlich diese Zeile aufgeschlüsselt, was ist die 10 und 7, ... ?
Ich habe da schon viele Zahlenvarianten gesehen aber kann es nicht zuordnen.

Wie schaut die Zeile aus wenn man den kompleten vServer restarten möchte?
vielleicht so ?????
#! /bin/sh
init 0
????

Danke
Marc
 
Den kompletten vServer mußt Du nicht neustarten - davon abgesehen funktioniert das bei den meisten vServer-Anbietern auch gar nicht.

Und um den Asterisk neu zu starten, habe ich 2 Zeilen in der Crontab:

1.) ein knallhartes Abschießen des laufenden Servers (denn wenn er wirklich "hängt" nützt Dir auch asterisk -rx "restart now" nix mehr :wink:

2.) den Neustart des Asterisk

also wir schießen ihn jeden Tag (* * *) um 04:05 Uhr ab:

5 4 * * * /usr/bin/killall -9 asterisk

und um 04:06 Uhr starten wir ihn wieder:

6 4 * * * /usr/sbin/asterisk

Wenn Du die Zeit (1 Minute) noch reduzieren willst, dann schreibst Du die Befehle in ein Shell Skript und rufst dieses Skript auf. Aber mit 1 Minuten Unterbrechnug um kurz nach 4 Uhr morgens kann ich eigentlich gut leben - zumal meine lokale DSL Zwangstrennung exakt um die gleiche Zeit stattfindet und mein Router 3 Minuten braucht, um die pppoe Verbindung wieder aufzubauen - meine Telefone kriegen also von dem 1-minütigen Ausfall des Asterisk gar nix mit.
 
chocoa schrieb:
danke @betateilchen für die Scriptidee. Ist ja wirklich ziemlich easy.
Asterisk startet jetzt bei Neustart automatisch.

Was muss ich tun damit der komplette vServer einmal pro Woche neu startet?
Ich denke mal ich muss irgend ein ähnliches Script wie:

10 7 * * * root /usr/sbin/asterisk -r -x "restart gracefully" >/dev/null 2>&1

in den Ordner /etc/cron.weekly legen, oder ?
Was heißt eigentlich diese Zeile aufgeschlüsselt, was ist die 10 und 7, ... ?
Ich habe da schon viele Zahlenvarianten gesehen aber kann es nicht zuordnen.

Wie schaut die Zeile aus wenn man den kompleten vServer restarten möchte?
vielleicht so ?????
#! /bin/sh
init 0
????

Danke
Marc

ich würde mal glatt sagen das init 0 ihn runter fährt und das mit Sicherheit!
sollte irgendetwas im Bereich init 3 - 5 sein, bin mir da aber nicht ganz so sicher! google mal init 1-5


sorry Posts haben sich überschnitten! Besten Dank noch einmal an Beta für den Kurs.
 
rabaucke schrieb:
ich würde mal glatt sagen das init 0 ihn runter fährt und das mit Sicherheit!
sollte irgendetwas im Bereich init 3 - 5 sein, bin mir da aber nicht ganz so sicher! google mal init 1-5

Jepp - init 0 wäre das Runterfahren. Aber wie gesagt - bei vServern funktioniert das mit dem Init nicht. Übrigens laufen vServer i.d.R im Runlevel 2 (kann man in der /etc/inittab nachschauen)
 
ich glaube es ist init 6 abe rich habe es ausprobiert, man kann den vServer wirklich nur übers webfrontend rebooten.
Wäre ja nett gewesen aber auch nicht so schlimm.

Ich hab da nur noch eine Frage:
Um eine e-mail nach dem Neustart des Asterisk zu bekommen muss man ja denke ich nur die safe_asterisk editieren und dann wahrscheinlich einen link davon zu /etc/rc2.d machen, oder liege ich da falsch.
Ich habe nämlich jetzt den effekt das dieser Link rot erscheint.

Gruß
Marc
 
oder muss ich zu meinem killscript vom Asterisk einfach nur noch folgende Zeile hinzufügen: ???

echo "Asterisk stopped at `date +%Y%mNaVH%M%S`" | mail -s "Asterisk Stopped `date +%Y%m%d`" -c "" -b "" [email protected]ess
 
Benachrichtigung mit sendmail, wenn Asterisk korrekt gestartet

Kann man dann irgendwie überprüfen ob der Asterisk korrekt gestartet wurde, und dann eine Mail schicken? Ich kenn mich mit sendmail nicht so aus, aber damit müsste es doch gehn, oder?

lg Dani
 
Ideen zur Ermittlung der Asterisk Uptime/Downtime werden im Thread Asterisk-Uptime-Projekt diskutiert. Link siehe meine Signatur.
 
Mir gehts eigentlich weniger darum die Uptime/Downtime meines * rauszufinden, sondern mehr um eine Benachrichtigung nach erfolgtem Neustart von Asterisk.
 
Die Frage ist doch, an welcher Stelle du ein sendmail anbringen willst.
Vor der Vollendung des Starts von Asterisk bringt es nichts, da er sich ja noch danach aufhängen kann. Und wenn Du die Info hast, dass er läuft, kann das Ding sich ja trotzdem gleich aufhängen. Daher die Idee, das Laufen des Asterisk kontinuierlich zu überwachen und ggf Maßnahmen (Reboot) zu veranlassen, falls das Ding hängt und darüber zu informieren.
 
@Stefan8 nix gegen Dein Projekt (den Sinn laß ich einfach mal dahingestellt) aber hier geht es um was anderes.

Grundsätzlich stellt sich zuerstmal die Frage, wieso man eine email haben möchte, wenn der Server neu gestartet wurde ? Dann ist doch soweit sowieso erstmal alles in Ordnung. Aber wenn man das eben doch haben möchte (aus welchen Gründen auch immer) dann würde ich das in das Startup-Skrip packen und dort aber auch gezielt auswerten, ob das Starten erfolgreich war.

Man kann das z.B. auch unabhängig vom Startup-Skript machen, indem man z.B. per Cronjob einmal pro Minute nachschaut, ob es eine neue /var/run/asterisk.ctl gibt. Das würde nämlich darauf hindeuten, daß der Asterisk neu gestartet wurde. Danach könnte man dann auch eine Mail verschicken.

Generell gibt es verschiedene Ansätze zum Monitoring eines Asterisk Servers - einige wurden vor langer Zeit schonmal hier im Forum diskutiert, andere finden sich auch noch auf http://www.voip-info.org
 
@betateilchen: Danke, du verstehst mich wenigstens.

betateilchen schrieb:
Und über einen Cronjob wird der Asterisk jede Nacht um 04:05 Uhr neu gestartet. Seither hatte ich keine Asterisk-Abstürze mehr und die Sache läuft superstabil.

Ich möchte auch einen superstabilen Asterisk und das Mail soll mir zeigen ob beim Neustart alles glatt gelaufen ist.

Kannst du mir vielleicht einen Hinweis geben wie der sendmail-Befehl aussehen würde?

Weiters werd ich mich auf voip-info.org mal über Monitoring schlau machen...

lg Dani
 
Du kannst nicht prüfen, ob nach dem Neustart alles "richtig läuft" oder nicht. Wenn irgendwas beim Starten schiefgeht, wird der Start abgebrochen.

Die Syntax von sendmail findest Du übrigens massenhaft im Internet - einfach mal googeln.

Übrigens - wenn es eine zuverlässige, einfache Methode gäbe, um einen VoIP Server wirklich konsequent zu überwachen, könnten wir uns hier im Forum die gesamten Störungsstellen sparen.
 
VOIPdani schrieb:
Kannst du mir vielleicht einen Hinweis geben wie der sendmail-Befehl aussehen würde?

Wenn es auch 'mail' sein darf: mail liest die Nachricht von stdin, der Text kann per echo oder Eingabeumlenkung oder irgendwas anderes erzeugt werden. Es ging also z.B. 'echo asterisk läuft | mail -s astinfo dani@localhost'.

Hilfe zu den Befehlen findet man übrigens häufig mit 'man mail' oder auch 'man sendmail'. Das geht manchmal sogar schneller als in irgendeinem Forum nachzufragen ;).
 
@clan

ich habe bei mir folgendes eingestellt aber leider hatte ich heute morgen keine mail bekommen. Woran kann das liegen, habe ich was vergessen irgendwo einzustellen ?

asterisk_restart -Datei in /etc/cron.daily
#! /bin/sh
5 4 * * * /usr/bin/killall -9 asterisk

6 4 * * * /usr/sbin/asterisk
7 4 * * * /usr/sbin/asterisk -vvvgddd
echo "Your Asterisk has been stopped and restarted at 'date+%Y%mNaVH%M%S'" | mail-s "Asterisk Stopped 'date+%Y%m%d'" -c"" -b""[email protected]
while [-e "/var/run/asterisk.pid"];

Anschließend habe ich einen Link in /etc/rc2.d zu o.g. Datei gelegt.

Gruß
Marc
 
Zuletzt bearbeitet:
ich hätte dann auch noch einmal eine Nachfrage zu den Sternchen:

5 4 * * * /usr/bin/killall -9 asterisk

ich weiß:
5 = Minute
4 = Stunde

ich vermute:
*=Tag *=Woche *=Jahr

Könnt ihr mich in meiner Vermutung bestätigen, weil dazu finde ich nun leider nirgendwo was ?
Warum sollten denn sonst dort die Sterne sein :)
Kann man leider auch schlecht testen, weil es dauert halt dann auch eine Weile.

Danke
Marc
 
Warum startet ihr nicht mit safe_asterisk ? Da ist die Mailbenachrichtigung schon drin. Ausserdem startet er sich dann selbst neu, wenn er abstürzen sollte.

jo
 
@rollo
habe ich auch schon konfiguriert

Code:
#!/bin/sh
CLIARGS="$*"                        # Grab any args passed to safe_asterisk
TTY=9                                 # TTY (if you want one) for Asterisk to run on
CONSOLE=yes                         # Whether or not you want a console
[email protected]    # Who to notify about crashes
MACHINE=`asterisk`             # To specify which machine has crashed when getting the mail
DUMPDROP=/tmp
ASTSBINDIR=/usr/sbin
#
# Don't fork when running "safely"
#
ASTARGS=""
if [ "$TTY" != "" ]; then
        if [ -c /dev/tty${TTY} ]; then
                TTY=tty${TTY}
        elif [ -c /dev/vc/${TTY} ]; then
                TTY=vc/${TTY}
        else
                echo "Cannot find your TTY (${TTY})" >&2
                exit 1
        fi
        ASTARGS="${ASTARGS} -vvvg"
        if [ "$CONSOLE" != "no" ]; then
                ASTARGS="${ASTARGS} -c"
        fi
fi
if [ ! -w ${DUMPDROP} ]; then
        echo "Cannot write to ${DUMPDROP}" >&2
        exit 1
fi

#
# Let Asterisk dump core
#
ulimit -c unlimited

#launch_asterisk()
#{
#}
run_asterisk()
{
        while :; do

                if [ "$TTY" != "" ]; then
                        cd /tmp
                        stty sane < /dev/${TTY}
                        ${ASTSBINDIR}/asterisk ${CLIARGS} ${ASTARGS} >& /dev/${TTY} < /dev/${TTY}
                else
                        cd /tmp
                        ${ASTSBINDIR}/asterisk ${CLIARGS} ${ASTARGS}
                fi
                EXITSTATUS=$?
                echo "Asterisk ended with exit status $EXITSTATUS"
                if [ "$EXITSTATUS" = "0" ]; then
                        # Properly shutdown....
                        echo "Asterisk shutdown normally."
                        exit 0
                elif [ $EXITSTATUS -gt 128 ]; then
                        let EXITSIGNAL=EXITSTATUS-128
                        echo "Asterisk exited on signal $EXITSIGNAL."
                        if [ "$NOTIFY" != "" ]; then
                                echo "Asterisk on $MACHINE exited on signal $EXITSIGNAL.  Might want to take a peek." | \
                                mail -s "Asterisk Died" $NOTIFY
                        fi
                        if [ -f /tmp/core ]; then
                                mv /tmp/core ${DUMPDROP}/core.`asterisk`-`date -Iseconds` &
                        fi
                else
                        if [ "${EXITSTATUS}" = "0" ]; then
                                echo "Asterisk ended normally.  Aborting."
                                exit 0
                        else
                                echo "Asterisk died with code $EXITSTATUS."
                                if [ -f /tmp/core ]; then
                                        mv /tmp/core ${DUMPDROP}/core.`asterisk`-`date -Iseconds` &
                                fi
                        fi
                fi
                echo "Automatically restarting Asterisk."
                sleep 4
        done
}
run_asterisk &

Ich denke mal der obrige Code ist richtig aber wie kann man das testen ?
Ich habe schon den vServer bzw. den Asterisk neugestartet aber bekomme nie eine Mail. Bekomme ich diese nur wenn der Asterisk außerordentlich abstürtzt, weil... ?

elif [ $EXITSTATUS -gt 128 ]; then
let EXITSIGNAL=EXITSTATUS-128
echo "Asterisk exited on signal $EXITSIGNAL."
if [ "$NOTIFY" != "" ]; then
echo "Asterisk on $MACHINE exited on signal

Damit diese Datei save_asterisk auch ausgeführt wird muss ich nicht noch irgendwo einen Link setzen oder etwas editieren ?

Danke
Marc
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
245,016
Beiträge
2,222,819
Mitglieder
371,794
Neuestes Mitglied
Kriss1
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.