Brauche Hilfe bei für mich schwierigen Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 06.07.2010 08:46:26

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! :THX:

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von jeff84 » 06.07.2010 09:14:11

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.
reichen die letzten 2 Zeilen des Logs?
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.
Wie kann man denn mit dem Programm ausgeben wie viele Gespräche noch geführt werden?
gnude hat geschrieben: Wenn die Anzahl der Gespräche 0 ist, sollte Asterisk neu gestartet werden.
Hilfe währe Prima! :THX:

Code: Alles auswählen

tail -n 2 /var/log/asterisk/misdn.log | grep "No free Channel"
if [ $? -eq 0 ]; then
...
fi
Statt dem ... müsste der Aufruf des Viewers stehen, je nachdem wie er ausgibt, wie viele Gespräche noch laufen. Das in ne weitere if-Abfrage und wenn Gespräche == 0, dann restart...

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 06.07.2010 09:20:23

Hallo
erstmal vielen Dank ! :mrgreen: :mrgreen:
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... :?

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von jeff84 » 06.07.2010 09:25:44

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...

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 06.07.2010 09:33:36

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.

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von jeff84 » 06.07.2010 09:39:03

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...

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von jeff84 » 06.07.2010 09:44:33

Code: Alles auswählen

asterisk -rx "show channels" 
könnte was liefern, mit dem man arbeiten kann... Hab leider kein Asterisk und kann daher nichts dazu sagen. Aber du könntest mal schauen, was das ausgibt, wenn ein Gespräch läuft und wenn kein Gespräch läuft. Dann könnte man mal schauen, was man damit anfangen kann...

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von Colttt » 06.07.2010 10:16:40

Code: Alles auswählen

asterisk -rx 'show channels' |awk '/active calls/ {print $1}'
dann hast du nur die zahl wieviele grade telefonieren, ich hoffe das ist ok so ;)

Gruss
Debian-Nutzer :D

ZABBIX Certified Specialist

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von jeff84 » 06.07.2010 10:30:46

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
Daher braucht man das vielleict garnicht...

Ein

Code: Alles auswählen

asterisk -rx "restart when convenient"
oder

Code: Alles auswählen

asterisk -rx "restart gracefully"
sollte dann ja auch gehen...

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

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 06.07.2010 10:57:55

top top top :THX: :THX: :THX:

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 :mrgreen:
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....

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von jeff84 » 06.07.2010 11:08:25

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...

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 06.07.2010 11:39:16

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! :THX:

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 07.07.2010 08:32:11

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:

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 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:

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
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 ??? :roll: :roll: :roll:

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von Colttt » 07.07.2010 09:09:23

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 :D

Gruss
Debian-Nutzer :D

ZABBIX Certified Specialist

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von gnude » 07.07.2010 09:38:24

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

Colttt
Beiträge: 3012
Registriert: 16.10.2008 23:25:34
Wohnort: Brandenburg
Kontaktdaten:

Re: Brauche Hilfe bei für mich schwierigen Script

Beitrag von Colttt » 07.07.2010 16:54:10

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 :D

ZABBIX Certified Specialist

Antworten