Brauche Hilfe bei für mich schwierigen Script
Brauche Hilfe bei für mich schwierigen Script
Hallo,
ich möchte gern ein Script was folgende Funktion erfüllt:
Es soll regelmässig ein die Log-Datei misdn.log (von Asterisk) nachschauen,
ob dort ein bestimmtes Wort drin vorkommt.
Das könnte man wohl mit tail -n 2 /var/log/asterisk/misdn.log
ausgeben. Die Ausgabe müsste mit grep nach den Wörtern "No free Channel" durchsucht werden.
Wenn die Wörter darin vorkommen sollte... jetzt wird es schwierig
das Programm Asterisk Call Viewer angezapt werden,
http://sourceforge.net/projects/acv/
um hier herauszufinden, wieviel telefonate noch geführt werden.
Wenn die Anzahl der Gespräche 0 ist, sollte Asterisk neu gestartet werden.
Hilfe währe Prima!
ich möchte gern ein Script was folgende Funktion erfüllt:
Es soll regelmässig ein die Log-Datei misdn.log (von Asterisk) nachschauen,
ob dort ein bestimmtes Wort drin vorkommt.
Das könnte man wohl mit tail -n 2 /var/log/asterisk/misdn.log
ausgeben. Die Ausgabe müsste mit grep nach den Wörtern "No free Channel" durchsucht werden.
Wenn die Wörter darin vorkommen sollte... jetzt wird es schwierig
das Programm Asterisk Call Viewer angezapt werden,
http://sourceforge.net/projects/acv/
um hier herauszufinden, wieviel telefonate noch geführt werden.
Wenn die Anzahl der Gespräche 0 ist, sollte Asterisk neu gestartet werden.
Hilfe währe Prima!
Re: Brauche Hilfe bei für mich schwierigen Script
reichen die letzten 2 Zeilen des Logs?gnude hat geschrieben:Hallo,
ich möchte gern ein Script was folgende Funktion erfüllt:
Es soll regelmässig ein die Log-Datei misdn.log (von Asterisk) nachschauen,
ob dort ein bestimmtes Wort drin vorkommt.
Das könnte man wohl mit tail -n 2 /var/log/asterisk/misdn.log
ausgeben.
Wie kann man denn mit dem Programm ausgeben wie viele Gespräche noch geführt werden?gnude hat geschrieben: Die Ausgabe müsste mit grep nach den Wörtern "No free Channel" durchsucht werden.
Wenn die Wörter darin vorkommen sollte... jetzt wird es schwierig
das Programm Asterisk Call Viewer angezapt werden,
http://sourceforge.net/projects/acv/
um hier herauszufinden, wieviel telefonate noch geführt werden.
gnude hat geschrieben: Wenn die Anzahl der Gespräche 0 ist, sollte Asterisk neu gestartet werden.
Hilfe währe Prima!
Code: Alles auswählen
tail -n 2 /var/log/asterisk/misdn.log | grep "No free Channel"
if [ $? -eq 0 ]; then
...
fi
Re: Brauche Hilfe bei für mich schwierigen Script
Hallo
erstmal vielen Dank !
Die Konstruktion sieht interessant aus!
Als Log Auswertung sollten 2 Zeilen reichen, sonst nimmt er aus versehen noch ältere Einträge und das ganze endet in einer Endlosschleife.
Das Programm Asterisk Call Viewer zeigt auf dem Bildschirm an, wieviele Gesrpäche grade geführt werden.
Da es selbst nur ein Script ist, müsste man diese Funktion doch ausschneiden können um die dann im eigenen Script auszuwerden.
Die Kunst ist ja, das diese Abrage alle paar Sekunden durchläuft. Kann man da zum Schluss eine Schleife um die komplette Konstruktion machen...?
Arghh der Call Viewer ist ein php script...
erstmal vielen Dank !
Die Konstruktion sieht interessant aus!
Als Log Auswertung sollten 2 Zeilen reichen, sonst nimmt er aus versehen noch ältere Einträge und das ganze endet in einer Endlosschleife.
Das Programm Asterisk Call Viewer zeigt auf dem Bildschirm an, wieviele Gesrpäche grade geführt werden.
Da es selbst nur ein Script ist, müsste man diese Funktion doch ausschneiden können um die dann im eigenen Script auszuwerden.
Die Kunst ist ja, das diese Abrage alle paar Sekunden durchläuft. Kann man da zum Schluss eine Schleife um die komplette Konstruktion machen...?
Arghh der Call Viewer ist ein php script...
Re: Brauche Hilfe bei für mich schwierigen Script
Klar kann man ne Schleife machen. Oder man könnte das Script in nen Cron-Job machen, der alle paar Sekunden läuft...
Gibt es zum Viewer ne Man-Page oder so? Da kannste ja mal schauen ob man die Anzahl der laufenden Gespräche irgendwie direkt ausgeben kann...
Gibt es zum Viewer ne Man-Page oder so? Da kannste ja mal schauen ob man die Anzahl der laufenden Gespräche irgendwie direkt ausgeben kann...
Re: Brauche Hilfe bei für mich schwierigen Script
Hmm
gibt es denn nen Cron-Job der alle paar Sekunden durchläuft?
Sonst währe eine Schleife vieleicht doch besser,
im Fehlerfall einfach das Script beenden.
Ich werd das Script mal mit meinen minimalen PHP Kenntnissen durchforsten und versuchen mit der Heckenscheere das soweit zurechtstutzen, das nur noch diese Funktion übrig bleibt.
gibt es denn nen Cron-Job der alle paar Sekunden durchläuft?
Sonst währe eine Schleife vieleicht doch besser,
im Fehlerfall einfach das Script beenden.
Ich werd das Script mal mit meinen minimalen PHP Kenntnissen durchforsten und versuchen mit der Heckenscheere das soweit zurechtstutzen, das nur noch diese Funktion übrig bleibt.
Re: Brauche Hilfe bei für mich schwierigen Script
Ok, mein Fehler... Cron kann man nur im Minutenbereich starten...
Also doch ne Schleife mit kurzem Sleep dazwischen...
Ach das ist n php-Script? Kannst ja mal schauen, wie die an die Anzahl der laufenden Gespräche kommen. Irgendwie muss man das dem Asterisk ja dann auch direkt entlocken können...
Also doch ne Schleife mit kurzem Sleep dazwischen...
Ach das ist n php-Script? Kannst ja mal schauen, wie die an die Anzahl der laufenden Gespräche kommen. Irgendwie muss man das dem Asterisk ja dann auch direkt entlocken können...
Re: Brauche Hilfe bei für mich schwierigen Script
Code: Alles auswählen
asterisk -rx "show channels"
Re: Brauche Hilfe bei für mich schwierigen Script
Code: Alles auswählen
asterisk -rx 'show channels' |awk '/active calls/ {print $1}'
Gruss
Debian-Nutzer
ZABBIX Certified Specialist
ZABBIX Certified Specialist
Re: Brauche Hilfe bei für mich schwierigen Script
Daher braucht man das vielleict garnicht...restart gracefully: Restart Asterisk gracefully, i.e. stop receiving new calls and restart at empty call volume
restart now: Restart Asterisk immediately
restart when convenient: Restart Asterisk at empty call volume
Ein
Code: Alles auswählen
asterisk -rx "restart when convenient"
Code: Alles auswählen
asterisk -rx "restart gracefully"
Also:
Code: Alles auswählen
while true; do
tail -n 2 /var/log/asterisk/misdn.log | grep "No free Channel" >/dev/null
if [ $? -eq 0 ]; then
asterisk -rx "restart when convenient"
fi
sleep 5
done
Re: Brauche Hilfe bei für mich schwierigen Script
top top top
das ist wohl genau das was ich gesucht habe.
nun läuft das script alle 5 sekunden durch, prüft die log datei und beim auftreten eines fehlers werden neue
telefonate abgelehnt und bei 0 neu gestartet. ich freu mcih
wenn die erste schleife jetzt einen fehler meldet, also die Worte "No free Channel" in der Logdatei erscheinen,
wird ja an asterisk der befehl gesendet.
wartet das script nun so lange bis der befehl ausgeführt wird?
nicht das die schleife weiter durchläuft und der befehl alle 5 sekunden erneut abgesetzt wird....
das ist wohl genau das was ich gesucht habe.
nun läuft das script alle 5 sekunden durch, prüft die log datei und beim auftreten eines fehlers werden neue
telefonate abgelehnt und bei 0 neu gestartet. ich freu mcih
wenn die erste schleife jetzt einen fehler meldet, also die Worte "No free Channel" in der Logdatei erscheinen,
wird ja an asterisk der befehl gesendet.
wartet das script nun so lange bis der befehl ausgeführt wird?
nicht das die schleife weiter durchläuft und der befehl alle 5 sekunden erneut abgesetzt wird....
Re: Brauche Hilfe bei für mich schwierigen Script
Ich hab keine Ahnung, wie das aussieht wenn der Befehl abgeschickt wird. Kannst ja mal von Hand testen... Wenn direkt wieder ein Promt kommt, läuft das Script vermutlich direkt weiter. Wenn aber erst ein Promt kommt, wenn das ganze neu gestartet wurde, dann sollte es auch warten. Vielleicht schreibt der Neustart-Befehl aber auch was in die Log-Datei, so dass die if-Bedingung dann eh nichtmehr zutrifft... Das musst du alles Herausfinden... Im Zweifel kann man nach dem Neustart-Befehl auch einen etwas längeren sleep einfügen...
Re: Brauche Hilfe bei für mich schwierigen Script
so
ich hab noch eine pause von 60 sekunden nach dem cli befehl für die asterisk eingefügt.
und gestartet. mal sehen ob es klappt.
danke nochmals!
ich hab noch eine pause von 60 sekunden nach dem cli befehl für die asterisk eingefügt.
und gestartet. mal sehen ob es klappt.
danke nochmals!
Re: Brauche Hilfe bei für mich schwierigen Script
Hallo,
ich habe ja das Problem, das sich die Aterisk manchmal weghängt, und dann in der Log Datei eingetragen wird, das keine Kanäle mehr verfügbar sind.
Anschliessend hängt sich die ganze Anlage weg.
Nun komm ich dem Fehler nicht bei, und möchte nun eine möglichst gute Fehlerbehandlung machen. Mein Plan:
Ein Script schaut alle paar Sekunden in die misdn.log nach, ob der Fehler aufgetreten ist. Und wenn ja, dann soll solange gewartet werden, bis keiner mehr Telefoniert und anschliessend wird die Anlage neu gestartet.
Mein erstes Script sieht so aus:
Das Script prüfte die lezten zwei Zeilen der Log Datei und sollte wenn hier "No free channel" auftritt der Anlage sagen, starte neu, wenn keine Gespräche mehr laufen.
DAs funktioniert auch soweit ganz gut. Aber der Befehl "restart gracefully" tut nicht was er soll. Eigentlich sollten neue Gespräche abgeblockt werden, aber die Anlage nimmt noch welche an. Kann mir jemand was dazu sagen?
Das zweite Script sieht so aus:
Dieses Programm soll ähnlich arbeiten.Es analysiert die letzten zwei Zeilen der log Datei und spring dann in eine Schleife. Die Idee hier, der Variable activecalls wird die Anzahl der grad laufenden Gesrpäche zugewiesen. Wenn der Wert null erreicht, dann soll die Anlage neu gestartet werden. Hier tritt ein Fehler in der letzten Zeile auf,
ich versteh aber nicht warum.
Kann mir jemand helfen ???
ich habe ja das Problem, das sich die Aterisk manchmal weghängt, und dann in der Log Datei eingetragen wird, das keine Kanäle mehr verfügbar sind.
Anschliessend hängt sich die ganze Anlage weg.
Nun komm ich dem Fehler nicht bei, und möchte nun eine möglichst gute Fehlerbehandlung machen. Mein Plan:
Ein Script schaut alle paar Sekunden in die misdn.log nach, ob der Fehler aufgetreten ist. Und wenn ja, dann soll solange gewartet werden, bis keiner mehr Telefoniert und anschliessend wird die Anlage neu gestartet.
Mein erstes Script sieht so aus:
Code: Alles auswählen
while true; do
tail -n 2 /var/log/asterisk/misdn.log | grep "No free channel" >/dev/null
if [ $? -eq 0 ]; then
echo "Telefonanlage meldet hänger, Log prüfen!" | mail -s "Iptam Fehler
asterisk -rx "restart gracefully"
logger "Schneller Neustart wegen Fehler im misdn"
sleep 60
fi
sleep 5
done
DAs funktioniert auch soweit ganz gut. Aber der Befehl "restart gracefully" tut nicht was er soll. Eigentlich sollten neue Gespräche abgeblockt werden, aber die Anlage nimmt noch welche an. Kann mir jemand was dazu sagen?
Das zweite Script sieht so aus:
Code: Alles auswählen
while true; do
tail -n 2 /var/log/asterisk/misdn.log | grep "No free Channel" >/dev/null
if [ $? -eq 0 ]; then
while $v = true, do
$activecalls = asterisk -rx 'show channels' |awk '/active calls/ {print $1}'
if [$activecalls = 0];then
asterisk restart
$v = false
fi
sleep 1
done
ich versteh aber nicht warum.
Kann mir jemand helfen ???
Re: Brauche Hilfe bei für mich schwierigen Script
also ich hoffe ich hab richtig gezählt, einmal hast du die erste if-bedingung nicht mit fi geschlossen und das selbe auch mit der ersten while-schleife, dort fehlt ein done..
hoffe das ist so richtig wie ich das sage
Gruss
hoffe das ist so richtig wie ich das sage
Gruss
Debian-Nutzer
ZABBIX Certified Specialist
ZABBIX Certified Specialist
Re: Brauche Hilfe bei für mich schwierigen Script
oh
ja
sieht so aus
mal ne andere frage....
wie kann ich erreichen, das dieses script immer schön brav weiterläuft,
auch wenn nen fehler auftritt, also dann automatisch neustartet?
gnude
ja
sieht so aus
mal ne andere frage....
wie kann ich erreichen, das dieses script immer schön brav weiterläuft,
auch wenn nen fehler auftritt, also dann automatisch neustartet?
gnude
Re: Brauche Hilfe bei für mich schwierigen Script
hmm evtl geht sowas mit ner endlos-schleife.. aber ka wie das geht.. musst ihm eben nur am anfang sagen das er wieder zum anfang gehen soll..
Debian-Nutzer
ZABBIX Certified Specialist
ZABBIX Certified Specialist