Warten auf Fertigstellung eines Prozess
Warten auf Fertigstellung eines Prozess
Hallo zusammen,
Ich brauche nochmal eure Hilfe.
Ich habe ein Script in dem mittels c2faxsend ein Fax versendet wird. Anschließend soll das Script die Logdatei die dabei geschrieben wurde auswerten.
Nun ist meine Frage, wie ich dem Script sage, das es erst dann weiterarbeitet wenn das Fax mit oder ohne Fehler versendet wurde.
Die Funktion wait() hilft mir ja nicht wirklich weiter, da es ja abhängig von der Seitenzahl ist wie lange das Script warten muss.
Vielen Dank.
Gruß
Tobias
Ich brauche nochmal eure Hilfe.
Ich habe ein Script in dem mittels c2faxsend ein Fax versendet wird. Anschließend soll das Script die Logdatei die dabei geschrieben wurde auswerten.
Nun ist meine Frage, wie ich dem Script sage, das es erst dann weiterarbeitet wenn das Fax mit oder ohne Fehler versendet wurde.
Die Funktion wait() hilft mir ja nicht wirklich weiter, da es ja abhängig von der Seitenzahl ist wie lange das Script warten muss.
Vielen Dank.
Gruß
Tobias
Re: Warten auf Fertigstellung eines Prozess
Du kannst abhängig vom Rückgabewert des Befehls entscheiden was passieren soll:
In anderen Scriptsprachen gibt es diese Möglichkeit ebenfalls.
Code: Select all
#!/bin/sh
...
sendfax
ret=$?
if [ $ret == 0 ]
then
# fax wurde versendet, mache jetzt blabla
else
# fax wurde nicht versendet, mache jetzt blubber
fi
...
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: Warten auf Fertigstellung eines Prozess
muss so heißen:Joe User wrote:Code: Select all
#!/bin/sh ... sendfax ret=!?
Code: Select all
ret=$?“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
Re: Warten auf Fertigstellung eines Prozess
Korrigiert, danke.
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: Warten auf Fertigstellung eines Prozess
Hallo zusammen,
Dann müsste ich ja am besten anstelle der if-Anweisung ne Schleife basteln.
Wäre es nich auch eine Möglichkeit herauszufinden welche pid der neue Prozess c2senfax hat und sich benachrichtigen lassen, wenn der Prozess beendet ist? (Ich weiß auch nicht ob es so ne benachrichtigungfunktion überhaupt gibt)
Vielen Dank für eure Hilfe.
Gruß
Tobias
Dann müsste ich ja am besten anstelle der if-Anweisung ne Schleife basteln.
Wäre es nich auch eine Möglichkeit herauszufinden welche pid der neue Prozess c2senfax hat und sich benachrichtigen lassen, wenn der Prozess beendet ist? (Ich weiß auch nicht ob es so ne benachrichtigungfunktion überhaupt gibt)
Vielen Dank für eure Hilfe.
Gruß
Tobias
Re: Warten auf Fertigstellung eines Prozess
Du kannst Dir das ja dann in eine Schleife packen.
Hier eine einfache Einführung in die Prozessteuerung unter Linux http://de.linwiki.org/wiki/Linuxfibel_- ... ssteuerung
Hier eine einfache Einführung in die Prozessteuerung unter Linux http://de.linwiki.org/wiki/Linuxfibel_- ... ssteuerung
02:32:12 21.12.2012 und dann sind Deine Probleme alle unwichtig.
Re: Warten auf Fertigstellung eines Prozess
Wozu? Solange Du den Kind-Prozess nicht in den Hintergrund schickst oder dieser sich nicht selbst vom Terminal entkoppelt (also zum Daemon wird), wartet das Skript automatisch auf die Beendigung des Prozesses, bevor es fortfährt - nach dem forken eines Kind-Prozesses folgt im Shell-Prozess ein wait (2).tsaenger wrote:Dann müsste ich ja am besten anstelle der if-Anweisung ne Schleife basteln.
Wäre es nich auch eine Möglichkeit herauszufinden welche pid der neue Prozess c2senfax hat und sich benachrichtigen lassen, wenn der Prozess beendet ist? (Ich weiß auch nicht ob es so ne benachrichtigungfunktion überhaupt gibt)
Hat man es mit einem oder mehreren Prozessen zu tun, die im Hintergrund (weil ggf. parallel) laufen sollen, kann man wait (1) verwenden:
Code: Select all
#!/bin/sh
# Starte einen Kindprozess und schicke ihn in den Hintergrund
nohup sendfax &
# Warte, bis alle vorher gestarteten Hintergrundprozesse beendet wurden
wait
echo "Jetzt werte ich dann mal das Logfile aus...“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
Re: Warten auf Fertigstellung eines Prozess
Hallo zusammen,
leider komme ich nicht wirklich weiter.
Mein Code
Ich verstehe nicht, warum das Script weiter ausgeführt wird, obwohl der Befehlt c2faxsend noch nicht abgeschlossen ist.
Erkennen kann ich es dadurch, das die Textdatei im ordner faxlogging schon befüllt wird bevor die fax.log Datei erstellt wurde.
Hat noch jemand von euch eine Idee, woran das liegen könnte?
Vielen Dank.
Gruß
Tobias
leider komme ich nicht wirklich weiter.
Mein Code
Code: Select all
c2faxsend -f SFF -v -d "${NUMMER}" -c FAXNumber:"${FAX_HEADER_NR}" -c OutgoningMSN:${SENDER_MSN} -c LocalIdentifier:"${FAX_HEADER_TXT}" -C /etc/capi4hylafax.conf ${SFF} &>/fax.log
ERROR_CODE=$?
wait
function sendok {
SEND_SPEED=$(cat /fax.log | grep "BaudRate" | awk -F ' = ' '{print $2}')
SEND_REMOTEID=$(cat /fax.log | grep "StationID" | awk -F ' = ' '{print $2}' | sed 's/[^0-9+]//g')
SEND_STATUS=1
SEND_STATUS_TXT="OK"
echo " " >>/faxloging/send_fax_debug.log
echo "FUNKTION sendok:" >>/faxloging/send_fax_debug.log
echo "SEND_SPEED= " $SEND_SPEED >>/faxloging/send_fax_debug.log
echo "SEND_REMOTEID= "$SEND_REMOTEID >>/faxloging/send_fax_debug.log
echo "SEND_STATUS=1 " >>/faxloging/send_fax_debug.log
echo "SEND_STATUS_TXT=OK" >>/faxloging/send_fax_debug.log
}
SEND_CAPI_TXT=$(cat /fax.log | grep "Reason " | awk -F ' 0x' '{print $2}')
SEND_CAPI_CODE=$(cat /fax.log | grep "Reason " | awk -F ' 0x' '{print $2}' | awk '{print $1};')
Erkennen kann ich es dadurch, das die Textdatei im ordner faxlogging schon befüllt wird bevor die fax.log Datei erstellt wurde.
Hat noch jemand von euch eine Idee, woran das liegen könnte?
Vielen Dank.
Gruß
Tobias
Re: Warten auf Fertigstellung eines Prozess
Ich habe mal ein Bischen aufgeräumt:
In Zeile 8 hast Du "&>/fax.log" geschrieben. Bist Du sicher, dass das so sein soll und nicht etwa so wie in Zeile 9?
In Zeile 13 habe ich ein echo eingefügt, poste bitte mal dessen Output, danke.
Und bist Du Dir bei dem Pfad zum fax.log sicher? Sollte das nicht besser /ein/pfad/fax.log sein?
Google kennt scheinbar kein Shellscript welches nach dem c2sendfax-Aufruf weitergeht und ich habe keine Hardware um c2sendfax zu testen. Das macht das Debuggen natürlich gleich doppelt schwer :-/
Code: Select all
c2faxsend -v \
-f SFF \
-d "${NUMMER}" \
-c FAXNumber:"${FAX_HEADER_NR}" \
-c OutgoningMSN:${SENDER_MSN} \
-c LocalIdentifier:"${FAX_HEADER_TXT}" \
-C /etc/capi4hylafax.conf ${SFF} \
&>/fax.log
# >/fax.log
ERROR_CODE=$?
echo "c2faxsend meldet $ERROR_CODE zurueck."
if [ "$ERROR_CODE" == "0" ]
then
# Ausführung von c2faxsend erfolgreich
else
# Ausführung von c2faxsend fehlerhaft
fi
wait
function sendok {
SEND_SPEED="$(awk -F' = ' '/BaudRate/ {print $2}' /fax.log)"
SEND_REMOTEID="$(awk -F' = ' '/StationID/ {print $2}' /fax.log | sed 's/[^0-9+]//g')"
SEND_STATUS="1"
SEND_STATUS_TXT="OK"
echo " " >>/faxloging/send_fax_debug.log
echo "FUNKTION sendok:" >>/faxloging/send_fax_debug.log
echo "SEND_SPEED=$SEND_SPEED" >>/faxloging/send_fax_debug.log
echo "SEND_REMOTEID=$SEND_REMOTEID" >>/faxloging/send_fax_debug.log
echo "SEND_STATUS=$SEND_STATUS" >>/faxloging/send_fax_debug.log
echo "SEND_STATUS_TXT=$SEND_STATUS_TXT" >>/faxloging/send_fax_debug.log
}
SEND_CAPI_TXT="$(awk -F' 0x' '/Reason / {print $2}' /fax.log)"
SEND_CAPI_CODE="$(awk -F' 0x' '/Reason / {print $2}' /fax.log | awk '{print $1}')"
In Zeile 13 habe ich ein echo eingefügt, poste bitte mal dessen Output, danke.
Und bist Du Dir bei dem Pfad zum fax.log sicher? Sollte das nicht besser /ein/pfad/fax.log sein?
Google kennt scheinbar kein Shellscript welches nach dem c2sendfax-Aufruf weitergeht und ich habe keine Hardware um c2sendfax zu testen. Das macht das Debuggen natürlich gleich doppelt schwer :-/
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: Warten auf Fertigstellung eines Prozess
Hallo Joe User,
Vielen Dank für deine Hilfe.
Ich habe die Umleitung in das fax.log mit und ohne & versucht. Bei der Version mit dem & brauche ich ja das wait um auf den Hintergrundprozess zu warten.
Ich dachte es ist egal wo das Fax.log liegt, wenn im Script jeweils /fax.log verwendet wird oder nicht?
Ich probiere es später mit dem echo aus. C2faxsend kommt ja von hylafax bzw. dessen faxcapi.
Gruß und danke
Tobias
Vielen Dank für deine Hilfe.
Ich habe die Umleitung in das fax.log mit und ohne & versucht. Bei der Version mit dem & brauche ich ja das wait um auf den Hintergrundprozess zu warten.
Ich dachte es ist egal wo das Fax.log liegt, wenn im Script jeweils /fax.log verwendet wird oder nicht?
Ich probiere es später mit dem echo aus. C2faxsend kommt ja von hylafax bzw. dessen faxcapi.
Gruß und danke
Tobias
Re: Warten auf Fertigstellung eines Prozess
Wenn Du einen Pfad mit / beginnst, ist der immer absolut und nicht relativ. Zur Verdeutlichung:
Code: Select all
cd /var/tmp
ls
echo "test" > /test.log
ls
ls /
echo "test" > test.log
ls
rm /test.log
rm test.log
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: Warten auf Fertigstellung eines Prozess
Code: Select all
ERROR_CODE=$?“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time


