geting un bash valeur retournée dans asterisk dialplan
Je suis nouveau dans asterisk
et ont besoin d'aide. J'ai un script bash que j'ai besoin d'exécuter à partir de mon plan de numérotation et d'obtenir la valeur retournée d'elle et la mettre dans une variable dans mon plan de numérotation.
Par exemple, mon script bash est test.sh
:
#! /bin/bash
echo "61"
Mon plan de numérotation:
exten => 3333,1,Set(result=${shell(/root/test.sh)})
exten => 3333,2,Verbose(result is: ${result})
Le script ont un 777 Autorisations et quand je le lance manuellement à partir de la ligne de commande shell, il est de travail. Je veux l'exécuter à partir de dialplan et utiliser la valeur de retour dans une variable, je ne reçois rien en retour ( pas de valeur de retour )
Mon asterisk version est Astérisque 1.6.2.20
OriginalL'auteur user1946171 | 2013-01-03
Vous devez vous connecter pour publier un commentaire.
Votre dialplan pas de travail, parce que astérisque est en cours d'exécution en vertu de l'astérisque de l'utilisateur et ne peut pas lire votre script dans le répertoire racine. Pour résoudre des problèmes de script, je vous conseille d'arrêter l'astérisque et le lancer dans une console en tant que
De cette façon, vous verrez des erreurs générées par des scripts.
MAIS
Car il n'y a aucune différence dans le coût de l'uc entre shell de démarrage et agi script de démarrage, je vous recommandons d'utiliser AGI script.
À le faire, vous devez mettre votre script dans /var/lib/asterisk/agi-bin/
Dialplan sera
p.s la meilleure pratique est de ne pas utiliser des scripts à tous, parce que le démarrage du shell est hi cpu coût de l'opération et il ne sera pas à l'échelle. La plupart des tâches peuvent être effectuées dans le dialplan, y compris complexe de contrôles et de requête de base de données/tâches de mise à jour.
OriginalL'auteur arheops
Essayez d'utiliser ${SHELL(date)} pour vérifier si cela fonctionne.
De mes extensions.conf:
De asterisk.journal après appel sur 4002:
-- L'exécution [3333@from-internal:2] ("SIP/3013-00000013", "résultat=") dans la nouvelle pile -- Exécution [3333@from-internal:3] NoOp("SIP/3013-00000013", "le résultat est: ") dans la nouvelle pile
aut => 3333,2,Set(result=${shell(date)}) s'é => 3333,3,noop(le résultat est: ${résultat}) ne fonctionne toujours pas je ne vois pas pourquoi
Je pense qu'il n'a pas d'importance, mais pouvez-vous s'il vous plaît écrire SHELL en majuscules?
il fonctionne uniquement avec des majuscules.Merci Igor!!!!
OriginalL'auteur Igor Chubin
Avez-vous des SELinux est activé? Souvent SELinux va bloquer ce type d'accès à des scripts shell.
Merci, SELinux est désactivé
je ne vois toujours pas pourquoi il ne fonctionne pas.ce que j'ai fait de mal?
OriginalL'auteur MichelV69
Créer le script dans /etc/asterisk/ou dans d'autres dossiers que astérisque a permisions:
chown asterisk /dossier
chgrp asterisk /dossier
Aussi garder à l'esprit que vous pouvez simplement exécuter la commande comme ceci:
s'é => 3333,1,Set(result=${shell(echo 61)})
OriginalL'auteur Calin Nicolae Necula
Toujours aussi assurez-vous que votre astérisque utilisateur est un shell.
Dans mon cas, j'ai eu /bin/false pour des raisons de sécurité. Donc la commande suivante coutume de travail:
OriginalL'auteur codewandler