Service über Asterisk stoppen und starten

xrated

Aktives Mitglied
Mitglied seit
2 Jul 2012
Beiträge
823
Punkte für Reaktionen
2
Punkte
18
Hallo!

ich möchte während dem telefonieren, torrent stoppen und am Ende wieder starten weil man sonst nicht richtig telefonieren kann bei nur 384kbit upload. Hat jemand eine Idee warum das nicht klappt? Entsprechend den Logs in Asterisk wird das Script auch gestartet aber ich sehe natürlich nicht ob es funktioniert.
Wenn ich das Script an der Bash starte funktioniert es, nur in Asterisk nicht. Es ist zwar kein richtiges AGI aber sollte doch trotzdem gehen oder?

extensions.conf
Code:
[throttleon]
exten => s,n,AGI(rtcontrol.agi,stop)
exten => s,n,Return

[throttleoff]
exten => s,n,AGI(rtcontrol.agi,start)
exten => s,n,Return

[incoming-arcor]
same => n,SET(GROUP()=trunkgroup1)
same => n,Dial(SIP/${EXTINTERN}&SIP/10,30,tTkKxXU(throttleon,s,1))
exten => h,1,ExecIf($[ ${GROUP_COUNT(trunkgroup1)} < 2 ]?Gosub(throttleoff,s,1))

rtcontrol.agi (Rechte asterisk:asterisk 744):
Code:
#!/bin/sh
var1=$1

if [ "${var1}" == "start" ]; then
    sudo -u rt screen -dm -S rtorrent
    sudo -u rt screen -S rtorrent -X screen rtorrent
elif [ "${var1}" == "stop" ]; then
    sudo -u rt screen -S rtorrent -p 0 -X quit
else
    echo "no arguments specified!"
fi

visudo:
Code:
Cmnd_Alias C3 = /usr/bin/screen -dm -S rtorrent
Cmnd_Alias C4 = /usr/bin/screen -S rtorrent -p 0 -X quit
Cmnd_Alias C6 = /usr/bin/screen -S rtorrent -X screen rtorrent

asterisk SERVER=(rt)NOPASSWD: C3, C4, C6
 
Ich vermute mal das es wegen Screen nicht hinhaut also schreibe ich jetzt mit Asterisk einfach etwas in ein File unter /tmp und überwache das über incron mit inotify. Dann muss man auch keine Berechtigungen an Asterisk vergeben.
 
Moin

Mach wieder ein Shellskript draus: mv rtcontrol.agi rtcontrol.sh
Dann nimmste den System() Aufruf: exten => s,n,System(sh rtcontrol.sh stop)

Na? Gehts?
 
Ja System() kann das, vermutlich muss der komplette Pfad zum Skript angegeben werden.
Und was, bitteschön, meinst du mit mit "anderer Art"?

Ich geb dir mal ein paar "working examples"...

Code:
; Systemkommando absetzen
exten => status,1,Answer()
exten => status,n,System(echo "AT&V" | nc localhost 1011 > /var/media/NEW_LINK/status.log)
exten => status,n,HangUp()

exten => 624,1,System(echo 'Anruf von ${EXTEN} zu ${CALLERID(all)}' >> /var/media/NEW_LINK/ast.log)
exten => 624,n,System(echo "AT&V" | nc localhost 1011 > /var/media/NEW_LINK/status.log)
exten => 624,n,Dial(SIP/704)
exten => 624,n,HangUp()
 
Ja System() kann das, vermutlich muss der komplette Pfad zum Skript angegeben werden.

hab ich und * hat auch Berechtigungen zum ausführen (an der shell mit user asterisk getestet). Mit sh davor gehts auch nicht.
Ich frage nur weil man in visudo auch keine shell scripts sondern nur binaries erlauben kann.

Und was, bitteschön, meinst du mit mit "anderer Art"?

siehe Post #2, dazu ist nur ein einfaches echo "text" >> file nötig per System cmd.
 
Was soll ich schreiben?
Erstmal: sh ist ein Programm, hast du das? oder gibt es das bei dir nicht?
Zweitens: Wenn sh ein Programm ist, ist rtcontrol.sh nur ein Argument für sh.
Drittens: Ist sh im PATH für Asterisk? Findet der das nicht? Oder darf der Herr asterisk das nicht?
Viertens: Wenn dein Account das darf aber asterisk nicht, wo hast du das reglementiert?
Fünftens: Nimm diese Reglementierung wieder raus.
Sechtens: Seit wann wird visudo dafür benutzt einem normalen Benutzer noch weniger Rechte zu geben?
Ich gebe darüber einen normalen Benutzer annähernd alle root Rechte.
 
Zuletzt bearbeitet:
Das Programm muss als User "rt" gestartet werden und Zugriff auf den Home folder von "rt" haben, deswegen das sudo -u rt davor und die Einträge in visudo. Und ich werde einem User sicher keine Root Rechte geben!

Ich hatte auch schon das Problem das wegen System mal * abgestürzt ist, ich denke das ist sowieso nicht so gut wenn man da Programme startet und stoppt. Zudem ist rtorrent mit Screen auch zu komplex zu steuern, da nehm ich lieber das default init Script.
 
Ok, ich kenn das so, dass meinetwegen der Benutzer rt mit su -l rt in seinem Homeverzeichnis landet.
Probier mal: sudo su -l
Dann wirst du root mit cd in sein Homeverzeichnis.
Vielleicht reicht es ja, wenn du rt auch so einloggst zum Kommandoausführen.

Btw: Wie loggst du ihn überhaupt ein ohne Passwort?
Brauch der keins? Hälst du das für sicherer?

Und wenn du System() nicht benutzen magst, benutz es halt nicht.
Ich habe da keine Skrupel. Abgestürzt ist deswegen bei mir jedenfalls noch nie was.
Aber ein Shellskript als .agi tarnen und auszuführen, halte ich gelinde gesagt, für selten bis seltsam.
 
Zuletzt bearbeitet:
Kostenlos!

Statistik des Forums

Themen
248,868
Beiträge
2,303,353
Mitglieder
378,528
Neuestes Mitglied
Fullyrealized