Shell Skript ausführen mit System() ohne Funktion

Code:
pi@raspberrypi ~ $ cat /etc/passwd
root: x :0:0:root:/root:/bin/bash
daemon: x :1:1:daemon:/usr/sbin:/bin/sh
bin: x :2:2:bin:/bin:/bin/sh
sys: x :3:3:sys:/dev:/bin/sh
sync: x :4:65534:sync:/bin:/bin/sync
games: x :5:60:games:/usr/games:/bin/sh
man: x :6:12:man:/var/cache/man:/bin/sh
lp: x :7:7:lp:/var/spool/lpd:/bin/sh
mail: x :8:8:mail:/var/mail:/bin/sh
news: x :9:9:news:/var/spool/news:/bin/sh
uucp: x :10:10:uucp:/var/spool/uucp:/bin/sh
proxy: x :13:13 : proxy :/bin:/bin/sh
www-data: x :33:33:www-data:/var/www:/bin/sh
backup: x :34:34:backup:/var/backups:/bin/sh
list: x :38:38:Mailing List Manager:/var/list:/bin/sh
irc: x :39:39:ircd:/var/run/ircd:/bin/sh
gnats: x :41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody: x :65534:65534:nobody:/nonexistent:/bin/sh
libuuid: x :100:101::/var/lib/libuuid:/bin/sh
pi: x :1000:1000:,,,:/home/pi:/bin/bash
sshd: x :101:65534::/var/run/sshd:/usr/sbin/nologin
ntp: x :102:104::/home/ntp:/bin/false
statd: x :103:65534::/var/lib/nfs:/bin/false
messagebus: x :104:106::/var/run/dbus:/bin/false
usbmux: x :105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm: x :106:109:Light Display Manager:/var/lib/lightdm:/bin/false
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/false

[Beitrag 2:]

Wie ist die Ausgabe von:
Code:
cat /etc/passwd | grep -i asterisk
?

Code:
pi@raspberrypi ~ $ cat /etc/passwd | grep -i asterisk
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/false
pi@raspberrypi ~ $
 
Zuletzt bearbeitet von einem Moderator:
root@raspberrypi:/home/pi# su - asterisk
root@raspberrypi:/home/pi# whoami
root
Evtl. liegt es auch daran, weil asterisk keine gültige shell hat:
Code:
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/false
 
asterisk hat keine shell

...und kann deswegen wahrscheinlich auch keinen Prozess starten der eine Shell benötigt.
Also mal die Zeile mit vi ändern, von...
Code:
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/false
...in...
Code:
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/sh
 
...und kann deswegen wahrscheinlich auch keinen Prozess starten der eine Shell benötigt.
Also mal die Zeile mit vi ändern, von...
Code:
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/false
...in...
Code:
asterisk: x :107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/sh


Wie ...mit welchem Befehl kann ich die Zeile aufrufen bzw. geht das auch mit dem nano Editor ?
 
Na klar geht das auch mit dem nano Editor.
Hauptsache du weißt wie der funktioniert.
 
Hi,

ja in nano finde ich mich besser zurecht. Aber was mir jetzt fehlt ist der Befehl den ich eingeben muss um die Änderung vorzunehmen.

sudo nano /var/lib/asterisk ???? hier finde ich nicht zum Ziel.
 
Zuletzt bearbeitet von einem Moderator:
Tja, wie wärs mit...
Code:
sudo nano /etc/passwd
...damit es weitergehen kann?
 
Hi, Danke.
Die Zeile habe ich geändert aber jetzt startet das Macro in Asterisk nicht mehr - evtl. passt jetzt die extension nicht mehr !?
 
Zuletzt bearbeitet von einem Moderator:
... jetzt startet das Macro in Asterisk nicht mehr - ...
Ist es für dein Vorhaben zwingend erforderlich, dass das Script durch den Asterisk gestartet wird oder dürfte das z. B. auch mit einem TCP-Paket, ausgelöst werden?
 
?
Zeig uns doch nochmal bitte die /etc/passwd
...und fasse sie diesmal bitte in [noparse]
Code:
[/noparse]
Code:
/etc/passwd
ein.
 
Code:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
asterisk:x:107:110:Asterisk PBX daemon,,,:/var/lib/asterisk:/bin/sh

[Beitrag 2:]

Code:
pi@raspberrypi ~ $ su root
Passwort: 
root@raspberrypi:/home/pi# su - asterisk
$ whoami
asterisk
$ id
uid=107(asterisk) gid=110(asterisk) Gruppen=110(asterisk),20(dialout),29(audio),1003(gpio)
$ dooropen.sh
-su: 3: dooropen.sh: not found
$ sh -x dooropen.sh
sh: 0: Can't open dooropen.sh
$ exit
root@raspberrypi:/home/pi# whoami
root
root@raspberrypi:/home/pi# exit
exit

Ich konnte mich jetzt als asterisk einloggen aber die Datei nicht ausführen.

[Beitrag 3:]

Ist es für dein Vorhaben zwingend erforderlich, dass das Script durch den Asterisk gestartet wird oder dürfte das z. B. auc
h mit einem TCP-Paket, ausgelöst werden?

solange es ausgelöst wird ist es egal aber was hinter dem ganzen Problem steckt verstehe ich noch nicht.

[Beitrag 4:]

Code:
[internal]
exten => _XXXX,1,Dial(SIP/${EXTEN}) ; alle Teilnehmer mit einer 4 - stelligen Nummer könner untereinander telefonieren
same => n,set(DYNAMIC_FEATURES=door)

[phones]
include => internal

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

[doorcall-run]
;Alle Telefone von Telefon 1000  anrufen
exten => s,1,NoOp(DoorStation ruft alle anderen an)
exten => s,n,Dial(SIP/2000&SIP/3000,50,Ttr)
exten => s,n,Hangup()

extensions.conf

Code:
door => 88,callee,Macro,sven

features.conf
 
OK, aber wir machen Fortschritte.

Jetzt machst du mal folgendes...
1. Als root: su - asterisk
2. cd /var/lib/asterisk
3. touch .profile
4. mkdir bin
5. cp /home/pi/bin/dooropen.sh bin;chmod +x bin/dooropen.sh
6. nano .profile
7. Da kommt dann rein: export PATH=~/bin:$PATH
8. nach dem Abspeichern ausloggen (exit) und wieder: su - asterisk
9. dooropen.sh # ausführen
10. extensions.conf ändern nicht vergessen. ;)
11. features.conf Fehler korrigieren...
Code:
door => 88,callee,Macro,sven
...in...
Code:
door => 88,callee,macro-sven
12. asterisk neustarten

Wo hakt es jetzt noch?
 
Zuletzt bearbeitet:
...da bleibe ich stecken:

Code:
oot@raspberrypi:/home/pi# su - asterisk
$ cd /var/lib/asterisk
$ touch.profile
-su: 2: touch.profile: not found

halt ich hab das Leerzeichen übersehen

..soweit

Code:
root@raspberrypi:/home/pi# su - asterisk
$ cd /var/lib/asterisk
$ touch.profile
-su: 2: touch.profile: not found
$ cd /var/lib/asterisk
$ touch .profile
$ mkdir bin
$ cp /home/pi/bin/dooropen.sh bin;chmod +x bin/dooropen.sh
$ nano .profile
$ exit
root@raspberrypi:/home/pi# su - asterisk
$ dooropen.sh
-su: 1: dooropen.sh: not found
$

extensions.conf

Code:
[internal]
exten => _XXXX,1,Dial(SIP/${EXTEN}) ; alle Teilnehmer mit einer 4 - stelligen Nummer könner untereinander telefonieren
same => n,set(DYNAMIC_FEATURES=door)



[phones]
include => internal

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




[doorcall-run]
;Alle Telefone von Telefon 1000  anrufen
exten => s,1,NoOp(DoorStation ruft alle anderen an)
exten => s,n,Dial(SIP/2000&SIP/3000,50,Ttr)
exten => s,n,Hangup()

und jeweils dialplan und features reload

die Datei

Code:
 nano .profile

war eine leere Datei hier habe ich folgendes eingefügt.

Code:
export PATH=~/bin:$PATH
 
extension.conf
Code:
[macro-sven]
exten => s,1,System(/bin/dooropen.sh)

Menno, versteh auch mal was du da machst.

Das muss jetzt in...
Code:
[macro-sven]
exten => s,1,System(dooropen.sh)
oder
Code:
[macro-sven]
exten => s,1,System(/var/lib/asterisk/bin/dooropen.sh)
...geändert werden.

aber erst, wenn...
Code:
whoami
root
su - asterisk
whoami
asterisk
dooropen.sh
...funktioniert.
 
solange es ausgelöst wird ist es egal ...
Versuch mal auf deinem Pi (evtl. auch wegen Redundanz/Ersatz):
Code:
sudo apt-get install socat
sudo socat -u -T 1 TCP4-LISTEN:33333,reuseaddr,fork EXEC:</Pfad/dein-Script> &
Aus dem Internet:
Code:
nc -v -n -w 1 <externe-IPv4-Adresse> 33333
oder aus dem Internet, in einem Browser "<externe-IPv4-Adresse>:33333" eingeben.
 
Hi koyaanisqatsi,

sorry - das ist sehr "kaltes Wasser" für den Anfang aber vielen Dank für die Unterstützung - echt super !!!

Wenn ich als asterisk eingeloogt bin und gebe den gesamten Pfad an dann funktioniert die Ansteuerung der LED.

Code:
pi@raspberrypi ~ $ su root
Passwort: 
root@raspberrypi:/home/pi# su - asterisk
$ dooropen.sh
-su: 1: dooropen.sh: not found
$ /var/lib/asterisk/bin/dooropen.sh

Das Makro wird aber noch nicht ausgeführt.

Code:
 == Using SIP RTP CoS mark 5
    -- Executing [1000@phones:1] Dial("SIP/2000-00000000", "SIP/1000") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/1000
    -- SIP/1000-00000001 is ringing
    -- SIP/1000-00000001 answered SIP/2000-00000000
    -- Locally bridging SIP/2000-00000000 and SIP/1000-00000001
[Aug  4 16:58:11] DTMF[30505]: channel.c:4084 __ast_read: DTMF begin '8' received on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4094 __ast_read: DTMF begin passthrough '8' on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:3999 __ast_read: DTMF end '8' received on SIP/2000-00000000, duration 100 ms
[Aug  4 16:58:11] DTMF[30505]: channel.c:4039 __ast_read: DTMF end accepted with begin '8' on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4068 __ast_read: DTMF end passthrough '8' on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4084 __ast_read: DTMF begin '8' received on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4094 __ast_read: DTMF begin passthrough '8' on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:3999 __ast_read: DTMF end '8' received on SIP/2000-00000000, duration 100 ms
[Aug  4 16:58:11] DTMF[30505]: channel.c:4039 __ast_read: DTMF end accepted with begin '8' on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4054 __ast_read: DTMF end '8' detected to have actual duration 72 on the wire, emulation will be triggered on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4061 __ast_read: DTMF end '8' has duration 72 but want minimum 80, emulating on SIP/2000-00000000
[Aug  4 16:58:11] DTMF[30505]: channel.c:4117 __ast_read: DTMF end emulation of '8' queued on SIP/2000-00000000
  == Spawn extension (phones, 1000, 1) exited non-zero on 'SIP/2000-00000000'
raspberrypi*CLI>

extensions.conf
Code:
[internal]
exten => _XXXX,1,Dial(SIP/${EXTEN}) ; alle Teilnehmer mit einer 4 - stelligen Nummer könner untereinander telefonieren
same => n,set(DYNAMIC_FEATURES=door)

[phones]
include => internal

[macro-sven]
exten => s,1,System(/var/lib/asterisk/bin/dooropen.sh)

[doorcall-run]
;Alle Telefone von Telefon 1000  anrufen
exten => s,1,NoOp(DoorStation ruft alle anderen an)
exten => s,n,Dial(SIP/2000&SIP/3000,50,Ttr)
exten => s,n,Hangup()

features.conf

Code:
door => 88,callee,macro-sven

reload von dialplan und features wurden durchgeführt.

ES FUNKTIONIERT :dance:

Ich musste noch ein paar kleine Änderungen machen.

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

extensions.conf
Code:
[globals]
DYNAMIC_FEATURES=door

[internal]
exten => _XXXX,1,Dial(SIP/${EXTEN}) ; alle Teilnehmer mit einer 4 - stelligen Nummer könner untereinander telefonieren
same => n,set(DYNAMIC_FEATURES=door)

[phones]
include => internal

[macro-sven]
exten => s,1,System(/var/lib/asterisk/bin/dooropen.sh)

[doorcall-run]
;Alle Telefone von Telefon 1000  anrufen
exten => s,1,NoOp(DoorStation ruft alle anderen an)
exten => s,n,Dial(SIP/2000&SIP/3000,50,Ttr)
exten => s,n,Hangup()

Also wenn ich das jetzt richtig verstanden habe lag hier ein rechte Problem vor und der Eintrag in /etc/passwd war falsch und die vorherigen Schritt
wären eventuell nicht notwendig gewesen !?

An dieser Stelle möchte ich mich für Eure sehr kompetente Unterstützung bedanken - besonders bei "koyaanisqatsi" Hut ab vor deinem knowhow!

Aber vielleicht könnt ihr mir das wesentliche Problem nochmal kurz erläutern.

Danke
 
Zuletzt bearbeitet von einem Moderator:
1a. asterisk.asterisk hatte keine Shell in /etc/passwd zugewiesen bekommen.
1b. Das ist kein Fehler, aber dadurch konnte asterisk.asterisk kein Skript ausführen.
2a. Wie sf3978 richtig erkannte, brauchte asterisk auch die gpio Gruppenzugehörigkeit.
2b. Um in der Datei value den LED Status setzen zu können (dooropen.sh).

Jetzt findet asterisk sein Skript, weil der Suchpfad um ~/bin erweitert wurde.
Ein Rechteproblem gibt es nicht mehr, weil asterisk im eigenen Heimatverzeichnis sucht und
vorallem durch die Gruppenzugehörigkeit asterisk.gpio jetzt auch den LED Status setzen darf.

PS: KnowHow ist das Eine. Geduld und hartnäckigkeit das Andere. ;)
 
Zuletzt bearbeitet:
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.