[GELÖST] AGI-Skript wird nicht ausgeführt

cisco_sipper

Neuer User
Mitglied seit
31 Mrz 2005
Beiträge
46
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

habe mir mit einem anderem shell-Skript ein csv-File aus dem phonebook der FB erzeugt, auf das ich jetzt aus der extensions.conf per AGI-Aufruf zugreifen möchte. Aufruf aus der extensions.conf:
Code:
exten => sip1,n,AGI(eintragsuchen.x|${CALLERID(num)})

habe es an der Stelle auch schon mit dem absoluten Pfad versucht, immer das gleiche Ergebnis in der *-CLI bei agi debug:

Code:
AGI Rx << verbose "Failed to execute '/var/lib/asterisk/agi-bin/eintragsuchen.x': No such file or directory" 2

  ==  eintragsuchen.x|<übergebene Rufnummer>: Failed to execute '/var/lib/asterisk/agi-bin/eintragsuchen.x': No such file or directory

Die Datei hat die folgenden Berechtigungen (ls-ali im agi-bin)
Code:
   1407 -rwxr-xr-x    1 ftpuser  root          220 Feb 18 22:34 eintragsuchen.x

ist also für alle user ausführbar...

AGI-Modul ist eingebunden.

Hat jemand ne Idee? Danke!
 
Zuletzt bearbeitet:
Wenn Deine * Installation die chroot-Variante nutzt, sehen alle darunter gestarteten Applikationen die Pfade relativ zu /var/asterisk14/oldroot ...
Da könnte evtl. Dein Problem liegen - überprüfen!!

Bei einer * Installation mit Root-Install ( bei dieser Variante wird der * direkt in Root - d.h. ohne chroot - gestartet ) funktioniert der Aufruf eines Test-Scripts mit dem Namen "test" Problemlos:
Code:
exten => _7,1,AGI(test|12345)
CLI-Output:
Code:
    -- Executing [7@sip771:1] AGI("SIP/771-00611618", "test|12345") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/test
    -- AGI Script test completed, returning 0
  == Auto fallthrough, channel 'SIP/771-00611618' status is 'UNKNOWN'

Gruß
dynamic
 
Problem tlw. gelöst

So, vielen Dank für deine Antwort. Bin gestern zu später Stunde noch einen Schritt weiter gekommen; ich hatte als erste Zeile im Shell-Skript #!/bin/ash statt #!/bin/sh stehen, nach der Änderung läuft das Skript aus *-sicht zwar grundsätzlich durch, ABER:

Im Skript selber funktioniert ausser der Zeile

Code:
echo "SET VARIABLE CALLERID(name) ${ANRUFERNAME}"

anscheinend kein anderer Befehl, denn im CLI ist ${ANRUFERNAME} nicht besetzt:

Code:
AGI Rx << SET VARIABLE CALLERID(name)

Rufe ich das Skipt aus der sh-Kommandozeile auf, klappt es:

Code:
./eintragsuchen.x 0151
SET VARIABLE CALLERID(name) Christian@Handy

wobei das Skript so aussieht:

Code:
#!/bin/sh

RUFNUMMER="${1}"
EINGABE="/mein/absoluter/Pfad/zur/Datei"
DATENSATZ="$(grep ${RUFNUMMER} ${EINGABE})"
ANRUFERNAME="${DATENSATZ%;*}"

echo "SET VARIABLE CALLERID(name) ${ANRUFERNAME}"

###ENDE###
 
Bist Du Dir 100% sicher, dass CALLERID(num) in "0151" aufgelöst wird ?
Am CLI Prompt wird bei verbose ja auch das jeweilige aufgelöste exten String gezeigt

Code:
DATENSATZ="`grep ${RUFNUMMER} ${EINGABE}`"
sieht m.E. besser aus, aber es müsste auch so wie bei Dir funktionieren ;-)
 
Bist Du Dir 100% sicher, dass CALLERID(num) in "0151" aufgelöst wird ?

das oben war nur ein Beispielaufruf an der Kommandozeile und KEINE konkrete CALLERID(num) ;-)
ich wollte der Allgemeinheit hier nicht meine Handynummer preisgeben :p

Also nochmal kurz zusammengefasst: Das shell-Skript funktioniert einwandfrei aus der Kommandozeile heraus, allerdings aus dem asterisk per AGI gibt es die oben beschriebenen "komischen" Effekte; das Skript funktioniert faktisch nicht.

So sieht der Aufruf aus dem asterisk aus:

Code:
exten => sip1,n,AGI(eintragsuchen.x|${CALLERID(num)})

und so aus der Kommandozeile:

Code:
# ./eintragsuchen.x 99015111111111

die vielen 1en sind nur beispielhaft.
 
Mein Hinweis war dahingehend, dass sehr wahrscheinlich ${Callerid(num)} anders aufgelöst wird als Du es in Deinem Script erwartest.
Dein Ergebnis deutet darauf hin, dass Dein grep keinen passenden String findet!

Wie gesagt: Schau mal im Verbose-Mode, mit welchem tatsächlichen Inhalt Dein "exten => sip1,n,AGI(eintragsuchen.x|${CALLERID(num)})" ausgeführt wird !
:spocht:
 
damit:

Code:
Executing [sip1@sip_in:2] AGI("SIP/sipgate.de-005f2e50", "eintragsuchen.x|990151********") in new stack
 
Gerade nochmal getestet und das File /var/lib/asterisk/agi-bin/test
Code:
#!/bin/sh
set -x
RUFNUMMER="${1}"
EINGABE="/var/usb/testdatei"
DATENSATZ="`grep ${RUFNUMMER} ${EINGABE}`"
ANRUFERNAME="${DATENSATZ%;*}"
echo "SET VARIABLE CALLERID(name) ${ANRUFERNAME}"

Funktioniert bei mir mit folgendem Aufruf
Code:
exten => _7,1,AGI(test|12345)
ohne Probs ...
 
du bekommst also in der *-CLI folgendes:

SET VARIABLE CALLERID(name) mein_name_aus_der_testdatei

?!
Bei mir klappt es selbst mit dem anderen grep nicht :-(
 
Hallo,
hatte ähnliche probleme mit Skripten.
Prüfe mal, ob die Dateicodierung ASCII ist und nicht UTF8.
Bei UTF8 hatte ich keine Probleme über die Konsole aber der Asterisk hat sich dran verschluckt...
 
Also ... anbei meine vollständigen Test-Dateien.
Ich nutze die Root-Install Variante des Asterisk, d.h. bei mir sind alle Pfade relativ zum original FBF-root!

Wenn Du "blanks" am Zeilenbeginn Deiner Eingabedatei hast, kann auch das dazu führen, dass CALLERID(name) lediglich ein "blank" wird, es sei denn Du passt Script wie unten angegeben an:

/var/lib/asterisk/agi-bin/test
Code:
#!/bin/sh
RUFNUMMER="${1}"
EINGABE="/var/usb/testdatei"
DATENSATZ="$(grep ${RUFNUMMER} ${EINGABE})"
ANRUFERNAME="${DATENSATZ%;*}"
echo "SET VARIABLE CALLERID(name) [COLOR=red]\"[/COLOR]${ANRUFERNAME}[COLOR=red]\"[/COLOR]"
/var/usb/testdatei
Code:
dynamic test;771
dynamic;772
extensions.conf [Auszug]
Code:
[COLOR=red]exten => _7,1,AGI(test|${CALLERID(num)})[/COLOR]
[COLOR=seagreen]exten => _7,2,Noop(${CALLERID(name)})[/COLOR]
CLI-Output ( agi debug und verbose mode )
Code:
 [B] [COLOR=red]-- Executing [7@sip771:1] AGI("SIP/771-006108b0", "test|771") in new stack[/COLOR][/B]
    -- Launched AGI Script /var/lib/asterisk/agi-bin/test
AGI Tx >> agi_request: test
AGI Tx >> agi_channel: SIP/771-006108b0
AGI Tx >> agi_language: de
AGI Tx >> agi_type: SIP
AGI Tx >> agi_uniqueid: 1203548089.55
AGI Tx >> agi_callerid: 771
AGI Tx >> agi_calleridname: TestSIP 771
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: 7
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: sip771
AGI Tx >> agi_extension: 7
AGI Tx >> agi_priority: 1
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >> >
AGI Rx << SET VARIABLE CALLERID(name) "dynamic test"
AGI Tx >> 200 result=1
    -- AGI Script test completed, returning 0
[B][COLOR=green] -- Executing [7@sip771:2] NoOp("SIP/771-006108b0", "dynamic test") in new stack[/COLOR][/B]
  == Auto fallthrough, channel 'SIP/771-006108b0' status is 'UNKNOWN'

Wenn das immer noch nicht hilft - na dann soll es halt nicht funktionieren ;-)

Gruß
dynamic
 
Zuletzt bearbeitet:
Hallo,
hatte ähnliche probleme mit Skripten.
Prüfe mal, ob die Dateicodierung ASCII ist und nicht UTF8.
Bei UTF8 hatte ich keine Probleme über die Konsole aber der Asterisk hat sich dran verschluckt...

sorry für die doofe Frage, aber wie prüfe ich das? mit file?
 
ich kapier gar nix mehr

Wenn das immer noch nicht hilft - na dann soll es halt nicht funktionieren ;-)

Gruß
dynamic


@ dynamic: Kannst du mir bitte ein ls deines Modul-Verzeichnisses sowie ein cat deiner modules.conf geben, ich habe den Verdacht, das mir mindestens ein entscheidenes Modul evtl. fehlt.

Das einzige Modul was ich zusätzlich zur spblinux-Version nachinstalliert habe, ist res_agi.so.

Danke!

EDIT: geht immer noch nicht ;-(

EDIT2: Das ist das neueste, was * mir um die Ohren haut:

Code:
RUFNUMMER=: sh: tcsetpgrp: Invalid argument
No such file or directory
sh: tcsetpgrp: Invalid argument
EINGABE=/var/media/ftp/Memorybird-Partition-0-1/addons/asterisk14/var/lib/asterisk/agi-bin/telliste: No such file or directory
sh: tcsetpgrp: Invalid argument
sh: tcsetpgrp: Invalid argument
DATENSATZ=`grep  `: No such file or directory
sh: tcsetpgrp: Invalid argument
sh: tcsetpgrp: Invalid argument
ANRUFERNAME=: No such file or directory
sh: tcsetpgrp: Invalid argument
sh: tcsetpgrp: Invalid argument
sh: tcsetpgrp: Invalid argument
sh: tcsetpgrp: Invalid argument
sh: tcsetpgrp: Invalid argument
 
Zuletzt bearbeitet:
Ausser app_setcallerid.so und res_agi.so sollte eigentlich nichts zusätzliches benötigt werden.

Mit diesen "Schnipseln" kann ich leider nicht weiterhelfen.

Mein Vorschlag ist:
1) den * einfach mal komplett deinstallieren ( nur Deine config-files behalten )
2) den * neu downloaden und mit der Option "-x" ( d.h. Root Install ) installieren

Gruß
dynamic
 
JAAAA, es läuft!!

Mein Vorschlag ist:
1) den * einfach mal komplett deinstallieren ( nur Deine config-files behalten )
2) den * neu downloaden und mit der Option "-x" ( d.h. Root Install ) installieren

Gruß
dynamic

:nemma: ROOT-Install ist die Lösung :dance:

@dynamic: Vorschlag: Einen Hinweis in dein Howto aufnehmen, das u. U. zu Problemen beim AGI kommt, wenn man NICHT Root Install benutzt.

@ Mods: bitte als [GELÖST] markieren. THX
 
Zuletzt bearbeitet:
Freut mich, dass es endlich funktioniert!

@dynamic: Vorschlag: Einen Hinweis in dein Howto aufnehmen, das u. U. zu Problemen beim AGI kommt, wenn man NICHT Root Install benutzt.
AGI funktioniert auch im non Root-Install Mode, wenn die Pfadangaben korrekt sind ( wie bereits im 2. Posting in diesem Thread erwähnt )
@ Mods: bitte als [GELÖST] markieren. THX
Kannst Du auch selbst machen, wenn Du im "erweiterten Modus" editierst!

Gruß
dynamic
 
back to the non-root

AGI funktioniert auch im non Root-Install Mode, wenn die Pfadangaben korrekt sind

ich muss leider auf die NON-Root-Install-Variante zurück, ansonsten komme ich an das Web-Interface der FB nicht mehr dran (weiße Seite), daher meine Frage, an welchen Stellen ich die Pfade auf was anpassen muss?

Erste Tests haben ergeben, dass ich in der extensions.conf alles lassen muss, da ich sonst den Ursprungsfehler wiederbekomme (No such file or directory).
 
1) Dann hast Du wahrscheinlich eine FW mit der neuen FBF-Oberfläche ... ich denke, dass es sich um das gleiche Problem, wie bei der 7270 handelt und wie folgt umgangen werden kann ( Anpassung des Asterisk Scripts an die neue FW ist schon in der Mache ... )

2) Wenn Du auf die chroot-Variante zurück möchtest, muss Dein Script wie folgt aufgerufen
Code:
/var/chroot /var/asterisk14 /var/lib/asterisk/agi-bin/eintragsuchen.x 99015111111111
funktionieren, denn die gleiche "Umgebung" nimmt Dein Script ein, wenn es aus dem * aufgerufen wird.

Die absolute Angabe Deiner "EINGABE" Datei muss sehr wahrscheinlich angepasst werden!

Gruß
dynamic
 
der /var/chroot -Aufruf endet in folgender Ausgabe:

Code:
# /var/chroot /var/asterisk14 /var/lib/asterisk/agi-bin/eintragsuchen.x 990151
[color=red]SET VARIABLE BLABLA[/color]
sh: tcsetpgrp: Operation not permitted
RUFNUMMER=: No such file or directory
sh: tcsetpgrp: Operation not permitted
EINGABE=/var/media/ftp/Memorybird-Partition-0-1/addons/asterisk14/var/lib/asterisk/agi-bin/telliste: No such file or directory
sh: tcsetpgrp: Operation not permitted
DATENSATZ=`grep  `: No such file or directory
sh: tcsetpgrp: Operation not permitted
ANRUFERNAME=: No such file or directory
sh: tcsetpgrp: Operation not permitted
SET VARIABLE CALLERID(name) ""

bei folgendem Skriptinhalt:

Code:
#!/bin/sh
[color=red]echo "SET VARIABLE BLABLA ${1}"[/color]
RUFNUMMER="${1}"
EINGABE="/var/media/ftp/Memorybird-Partition-0-1/addons/asterisk14/var/lib/asterisk/agi-bin/telliste"
DATENSATZ="`grep ${RUFNUMMER} ${EINGABE}`"
ANRUFERNAME="${DATENSATZ%;*}"
echo "SET VARIABLE CALLERID(name) \"$ANRUFERNAME\""

wobei die Variable "BLABLA" in diesem Beispiel den Wert "990151" haben müsste, hat sie aber nicht :-(
Als erstes müsste ja der Parameter $1 besetzt sein, da geht das Problem ja schon los...
 
Das "tcsetpgrp" versucht dem untergeordneten Prozess die Group-ID des Vordergrundprozesses zuzuordnent und dabei gibt es wohl irgendwelche Probleme ... genauen Hintergrund kenne ich nicht und werde diesen auch nicht weiter verfolgen.

Ich schlage vor, dass Du die unter 1) vorgeschlagene Variante nutzt

Gruß
dynamic
 
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.