Archiv verlassen und diese Seite im Standarddesign anzeigen : Skripte debuggen
ultramarin
08-06-2005, 17:51
Ich versuche ein Shell-Skript zum laufen zu bekommen, das nach manueller Ausführung in root/user-Shell hervoragend funktioniert, aber bei automatischer
Ausführung durch eine Konfigurations-Datei ( /etc/isdn/callerid.conf startet automatisch ein Skript nach einem Anruf) immer nur teilweise ausgeführt wird, d.h. bestimmte Anweisungen werden ignoriert, andere brav ausgeführt. Ich vermute, das es evt. ein Pfad-Problem ist, aber da ich aber Skripting-Newbie bin, hab ich keine Ahnung, wie ich am besten rauskriegen könnte, woran es wirklich liegt. Hat jemand einen Tipp?
Wenn du ein script von einem script aus aufrufen lässt arbeitet es im Arbeitsverzeichnis des aufrufenden scriptes und mit den user Berechtigungen mit dem dein initiierendes Script arbeitet.
Es kann sein dass dem User der das erste Script startet nicht alle Pfade zu den Befehlen bekannt sind. Dies wird in der .bashrc oder der .profile des jeweiligen Benutzers festgelegt.
Am einfachsten ist es in deinem eigenen Script mit kompletten Pfadangaben zu den von dir benutzten Befehlen arbeiten.
z.B.
nich nur iptables aufrufen sondern /usr/sbin/iptables
peschmae
08-06-2005, 19:49
Im ABS-Guide steht auch was - wie zu jedem Thema ;)
http://www.tldp.org/LDP/abs/html/debugging.html
MfG Peschmä
ultramarin
09-06-2005, 10:39
Ich komme einfach nicht drauf, was falsch ist. :( Wenn ich das Skript per Hand mit -x ausführe, sagt er mir, das alles in Ordnung ist, jeder Befehl wird korrekt ausgeführt, die Variablen richtig gesetzt. Ich hab jetzt auch mal alle Pfade absolut beschrieben. Das Skript sieht (sehr vereinfacht) so aus:
#!/bin/sh
echo "Anruf von $2" | /usr/bin/say;
echo "$2 hat angerufen">/home/ultramarin/anruf_von_$2.txt;
if [[ $2 == *123* ]]
then
/usr/bin/playwave /tmp/wav/anruf123.wav;
fi
....
$2 ist die Telefonummer, /usr/bin/say ist ein weiteres Skript, welches zur Sprachausgabe aufgerufen wird.
Bei einem Telefonanruf wird aber nur der untere echo-Befehl zur Ausgabe einer Datei und playwave ausgeführt, jedoch nicht der Aufruf von say. Wenn ich das Skript jedoch selbst starte, funktioniert alles inklusive Sprachausgabe.
Das say-Skript zur Sprachausgabe in /usr/bin sieht so aus:
#!/bin/sh
ROOT=/usr/local/mbrola
VOICE=$ROOT/de3/de3
SEX=f
if [ "$1" = "-u" ]; then
conversion="| recode UTF-8..lat1"
file=$2
else
conversion=""
file=$1
fi
eval "cat $file $conversion |\
sed 's/@/ ät /g' |\
$ROOT/pipefilt |\
$ROOT/preproc $ROOT/Hadifix.abk $ROOT/Rules.lst |\
$ROOT/txt2pho -$SEX -p $ROOT/data/ |\
$ROOT/mbrola $VOICE - -.au |\
play -t au -"
/usr/bin/play, nicht nur play, würde ich spontan mal sagen.
ultramarin
09-06-2005, 12:06
leider nicht. Habe es auch mit /usr/bin/play probiert bzw. /bin/sed - selbes Ergebniss. Er findet zB. auch /usr/bin/playwav ohne absolute Pfadangabe. Vielleicht liegts ja an den Rechten?
Das Skript selbst liegt unter /etc/isdn/isdnspeak, und hat
0700 als Rechte.
/usr/bin/say hat 755, beide (isdnspeak + say) gehören root und sind in der Gruppe root.
?!
ultramarin
10-06-2005, 17:18
jetzt hab ich den Fehler immerhin: aktiviere ich die Fehlerausgabe von isdnlog ( das die Skripte ja über callerid.conf startet) findet sich folgende Fehlermeldung in /var/log/messages:
Concat: Panic, check your pitch!
Diese Fehlermeldung erscheint normalerweise nur, wenn man das Sprachausgabe-Tool "txt2pho" aufruft, ohne das man eine Konfigurationsdatei txt2phorc im home-Verzeichnis hat. Allerdings habe ich diese Datei sowohl unter /home/ultramarin als auch unter /root... scheint so, das isdnlog diese Dateien nicht findet...
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.