Shell Skript ausführen mit System() ohne Funktion

bosv

Neuer User
Mitglied seit
2 Aug 2014
Beiträge
32
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen,

ich möchten ein Shell Skript im Dialplan ausführen (unter Eingabe von [noparse]88)[/noparse] soweit funktioniert das auch laut CLI bis auf das,
das Skript nicht startet.

Hier mal ein paar Auszüge:

Skript:

Code:
#!/bin/sh 
echo "1"> /sys/class/gpio/gpio4/value
sleep 3
echo "0"> /sys/class/gpio/gpio4/value
exit 0

Skript Rechte:
Code:
pi@raspberrypi ~/bin $ ls -ld dooropen.sh
-rwxr-xr-x 1 asterisk asterisk 108 Aug  2 13:50 dooropen.sh

features.conf
Code:
[applicationmap]
door => 88,callee,Macro,sven

extensions.conf
Code:
[internal]

exten => _XXXX,1,Dial(SIP/${EXTEN}) ; alle Teilnehmer mit einer 4 - stelligen N$
same => n,set(DYNAMIC_FEATURES=door)

[phones]
include => internal

[macro-sven]
exten => s,1,System(/home/pi/bin/dooropen.sh)

Asterisk Rechte:
Code:
pi@raspberrypi ~ $ ls -ld /etc/asterisk
drwxr-xr-x 3 asterisk asterisk 4096 Jul 18 21:41 /etc/asterisk
pi@raspberrypi ~ $

CLI wenn 88 gewählt wird:
Code:
pi@raspberrypi ~ $ sudo asterisk -vvvr
Asterisk 1.8.13.1~dfsg1-3+deb7u3, Copyright (C) 1999 - 2012 Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
  == Parsing '/etc/asterisk/asterisk.conf':   == Found
  == Parsing '/etc/asterisk/extconfig.conf':   == Found
Connected to Asterisk 1.8.13.1~dfsg1-3+deb7u3 currently running on raspberrypi (pid = 1919)
Verbosity is at least 9
  == Using SIP RTP CoS mark 5
    -- Executing [1000@phones:1] Dial("SIP/2000-00000082", "SIP/1000") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/1000
    -- SIP/1000-00000083 is ringing
    -- SIP/1000-00000083 answered SIP/2000-00000082
[Aug  2 14:35:38] DTMF[25502]: channel.c:4084 __ast_read: DTMF begin '8' received on SIP/2000-00000082
[Aug  2 14:35:38] DTMF[25502]: channel.c:4094 __ast_read: DTMF begin passthrough '8' on SIP/2000-00000082
[Aug  2 14:35:38] DTMF[25502]: channel.c:3999 __ast_read: DTMF end '8' received on SIP/2000-00000082, duration 100 ms
[Aug  2 14:35:38] DTMF[25502]: channel.c:4039 __ast_read: DTMF end accepted with begin '8' on SIP/2000-00000082
[Aug  2 14:35:38] DTMF[25502]: channel.c:4068 __ast_read: DTMF end passthrough '8' on SIP/2000-00000082
[Aug  2 14:35:39] DTMF[25502]: channel.c:4084 __ast_read: DTMF begin '8' received on SIP/2000-00000082
[Aug  2 14:35:39] DTMF[25502]: channel.c:4094 __ast_read: DTMF begin passthrough '8' on SIP/2000-00000082
[Aug  2 14:35:39] DTMF[25502]: channel.c:3999 __ast_read: DTMF end '8' received on SIP/2000-00000082, duration 100 ms
[Aug  2 14:35:39] DTMF[25502]: channel.c:4039 __ast_read: DTMF end accepted with begin '8' on SIP/2000-00000082
[Aug  2 14:35:39] DTMF[25502]: channel.c:4068 __ast_read: DTMF end passthrough '8' on SIP/2000-00000082
    --  Feature Found: door exten: door
    -- Executing [s@macro-sven:1] System("SIP/1000-00000083", "/home/pi/bin/dooropen.sh") in new stack
raspberrypi*CLI> 
Disconnected from Asterisk server
Executing last minute cleanups
pi@raspberrypi ~ $

Das Skript soll eine LED an einem Raspberry PI schalten -> bei direktem Aufruf des Skript wird dieses auch ausgeführt aber über Asterisk
Asterisk nicht.

Hat jemand noch eine Idee ???

Ich bin solangsam am Ende mit meinen Try & Errors . Bin auch Neueinsteiger unter LINUX Debian Wheezy.

Vielen Dank im voraus.

Gruß

Sven
 
Zuletzt bearbeitet von einem Moderator:
Das Skript soll eine LED an einem Raspberry PI schalten -> bei direktem Aufruf des Skript wird dieses auch ausgeführt aber über Asterisk
Asterisk nicht.

Hat jemand noch eine Idee ???
Wie ist auf deinem Pi, die Ausgabe von:
Code:
cat /etc/group | grep -i gpio
?
 
Abend

Wenn das Skript funktioniert (nicht in asterisk), dann liegt eventuell das gute alte Rechteproblem vor:
Darf asterisk asterisk auf/in /sys/class/gpio/gpio4/value schreiben?
 
Hallo sf39789,

folgendes wird ausgegeben:

Code:
pi@raspberrypi ~ $ cat /etc/group | grep -i gpio
gpio:x:1003:pi

Wie kann ich diese Rechte vergeben - damit Asterisk in der Gruppe GPIO Mitglied wird ? Wie gesagt ich sammle erst Linux Erfahrungen.
 
asterisk ist klein geschrieben bei $ ls -ld /etc/asterisk
drwxr-xr-x 3 asterisk asterisk

o.k. danke ich probiere es aus und melde mich wieder.

[Beitrag 2:]

Hallo,

vielen Dank für die schnellen Auskünfte.

hier das Resultat der Befehle doch testen kann ich erst morgen.

Code:
pi@raspberrypi ~ $ sudo usermod -G gpio -a asterisk
pi@raspberrypi ~ $ cat /etc/group | grep -i gpio
gpio : x : 1003 : pi,asterisk

[Beitrag 3:]

Hallo,

das Resultat nachdem Asterisk in der Gruppe GPIO Mitglied ist - ist das gleiche.
Die LED am Ausgang wird nicht geschaltet.

Was kann das noch sein ?:mad:
 
Zuletzt bearbeitet von einem Moderator:
Hm, vielleicht hat asterisk das noch nicht mitbekommen.
Also, hast du asterisk beendet und neugestartet?
Du kannst dich auch als root zum asterisk User machen und das testen:
Code:
su - asterisk
whoami
asterisk # Jetzt kannst du auch mit dem Kommando [b]id[/b] prüfen ob gpio auch als Gruppenmitglied gelistet wird.
id
dooropen.sh
sh dooropen.sh
sh -x dooropen.sh
exit
whoami
root
Vielleicht, oder sehr wahrscheinlich, brauchst du auch die volle Pfadangabe zu dooropen.sh.
Code:
/der/lange/weg/zu/dooropen.sh
sh /der/lange/weg/zu/dooropen.sh
sh -x /der/lange/weg/zu/dooropen.sh
Poste auch ruhig mal die Ergebnisse hier.
...das wird. ;)
 
Zuletzt bearbeitet:
Hallo,

was verstehst Du unter dem langen weg ?


das Skript liegt unter folgender Ordner Struktur:
/home/pi/bin/skript.sh

/home ist root root
/pi/ ist pi pi
/bin/ ist auch pi pi
skript.sh ist asterisk asterisk

muss ich die übergeordneten Ordnern jetzt auch die Gruppe asterisk zuweisen damit Asterisk auf das Skipt zugreifen kann ?

Bzw. wie vergebe ich Asterisk die Rechte das es Dateien in anderen Verzeichnissen ausführen darf ?

Asterisk liegt in /etc/asterisk.

Deine Befehle muss ich später testen wenn ich zuhause bin.

Danke
 
was verstehst Du unter dem langen weg ?
...den absoluten Pfad: /home/pi/bin/skript.sh

muss ich die übergeordneten Ordnern jetzt auch die Gruppe asterisk zuweisen damit Asterisk auf das Skipt zugreifen kann ?
Nein. Einfacher wäre asterisk auch pi als Gruppe zuzuweisen.
Es reicht wenn für die Verzeichnisse die Rechte für o (others) auf rx gesetzt ist.
Dann könnte da aber jeder rein und das Skript ausführen.
Code:
chmod o=rx Verzeichnisname

Es würde aber vieles vereinfachen wenn asterisk.asterisk auch ein Homeverzeichnis hätte: /home/asterisk
Und dann da drin sein bin Verzeichnis: /home/asterisk/bin
Wenn dann noch eine .profile in /home/asterisk liegt, die den $PATH um ~/bin erweitert: export PATH=~/bin:$PATH
Dann musst du nicht das Homeverzeichnis von pi für Alle öffnen.
 
Zuletzt bearbeitet:
Hallo,
ich will mich ja nicht einmischen, aber ich hatte das gleiche Problem mit Linux, denn auch ich bin kein Linux-Experte. Deshalb hatte ich wiringPI auf dem RPI installiert und an anderer Stelle in einem C-Programm beim jedem Start des RPI für den entsprechenden PIN ein Setup gemacht:

...
wiringPiSetup();
...
pinMode(DOORPIN, OUTPUT);
digitalWrite(DOORPIN, LOW);
...

Und bei Bedarf mit *9 das Tor mit dieser Skript-Datei "opendoor" geöffnet/geschlossen bzw. beim Test die LED zum Leuchten gebracht:
#!/bin/bash
##
gpio write 3 1
sleep 1
gpio write 3 0

und dafür in der extensions.conf folgenden Eintrag verwendet, wobei ich nicht geprüft habe ob alle Einträge hier wirklich notwendig sind:

[opendoor]
exten => *9,1,Answer()
exten => *9,n,Wait(1)
exten => *9,n,System(sh /home/pi/bin/opendoor)
exten => *9,n,Hangup()

Ist zwar keine Beantwortung der Frage warum das Skript nicht so ohne weiteres ausgeführt wird, was für mich aber ein funktionierener "work around" war.
Gruß
Manne
 
Zuletzt bearbeitet:
Rechte

Als welcher User läuft denn dein asterisk?
root? asterisk? pi?
Und wenn er als asterisk läuft, wie sind die Verzeichnisrechte bei /home/pi und /home/pi/bin ?
Nicht, das der TE deinem Beispiel folgt, und es geht dann trotzdem nicht.
 
Hallo,

hier nochmal die Rechte der Verzeichnisse.

Code:
pi@raspberrypi ~ $ ls -ld /etc/asterisk
drwxr-xr-x 3 asterisk asterisk 4096 Jul 18 21:41 /etc/asterisk
pi@raspberrypi ~ $ ls -ld /home
drwxr-xr-x 3 root root 4096 Sep 25  2013 /home
pi@raspberrypi ~ $ ls -ld /home/pi
drwxr-xr-x 12 pi pi 4096 Jul 30 11:35 /home/pi
pi@raspberrypi ~ $ ls -ld /home/pi/bin
drwxr-xr-x 2 pi pi 4096 Aug  3 12:37 /home/pi/bin
pi@raspberrypi ~ $ ls -ld /home/pi/bin/dooropen.sh
-rwxr-xr-x 1 asterisk asterisk 108 Aug  2 13:50 /home/pi/bin/dooropen.sh
pi@raspberrypi ~ $

[Beitrag 2:]

pi@raspberrypi ~ $ su - asterisk
Passwort:

hier will er ein Passwort ich hatte aber noch keins vergeben - gibts hier ein default Passwort ?
 
Zuletzt bearbeitet von einem Moderator:
Wahrscheinlich nicht (kein Passwort).
Du solltest aber schon der Obermotz/Administrator root sein. ;)
Der braucht nämlich für sowas auch kein Passwort.

Die Rechte für others (alle Anderen) sehen OK aus.
Kann/Darf asterisk.asterisk das Programm gpio ausführen?

Dann probier mal was Manne44 als dooropen[.sh] benutzt...
Code:
#!/bin/bash
##
gpio write 3 1
sleep 1
gpio write 3 0
 
Zuletzt bearbeitet:
hier nochmal die Rechte der Verzeichnisse.
Wie sind die Rechte der Verzeichnisse bzw. der Datei(en), die Du in deinem Script verwendest?
Code:
echo "1"> /sys/class/gpio/gpio4/value
 
Manne verwendet WiringPi , das hab ich noch nicht installiert.

[Beitrag 2:]

Code:
pi@raspberrypi ~ $ ls -ld /sys/
dr-xr-xr-x 12 root root 0 Jan  1  1970 /sys/

pi@raspberrypi ~ $ ls -ld /sys/class/
drwxr-xr-x 39 root root 0 Aug  3 21:59 /sys/class/

pi@raspberrypi ~ $ ls -ld /sys/class/gpio/
drwxrwx--- 2 root gpio 0 Aug  3 21:59 /sys/class/gpio/

pi@raspberrypi ~ $ ls -ld /sys/class/gpio/gpio4
lrwxrwxrwx 1 root gpio 0 Aug  3 21:59 /sys/class/gpio/gpio4 -> ../../devices/virtual/gpio/gpio4

pi@raspberrypi ~ $ ls -ld /sys/class/gpio/gpio4/value
-rwxrwx--- 1 root gpio 4096 Aug  3 22:00 /sys/class/gpio/gpio4/value
pi@raspberrypi ~ $

[Beitrag 3:]

Hallo Koyaanisqatsi,

Code:
root@raspberrypi:/home/pi# su - asterisk
root@raspberrypi:/home/pi# whoami
root
root@raspberrypi:/home/pi# id
uid=0(root) gid=0(root) Gruppen=0(root),1001(indiecity)
root@raspberrypi:/home/pi#
 
Zuletzt bearbeitet von einem Moderator:
Komisch, bei mir geht als root das: su - [irgend ein user aus/etc/passwd]
...und dann bin ich der auch.
 
Das ist ja auch kein Ordner sondern eine Textdatei mit den Benutzern.
So kannst du sie dir ansehen:
Code:
cat /etc/passwd
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
245,079
Beiträge
2,224,053
Mitglieder
371,918
Neuestes Mitglied
_manuel1
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.