Abarbeitung von Scripten

Post Reply
Message
Author
Thomas

Abarbeitung von Scripten

#1 Post by Thomas »

Hi,
ich habe einige Scripte das "dies und das" erledigen. Bisher habe ich für jedes Scripte einen Eintrag in der Crontab gemacht.
Nun meine Idee:
Ich starte nur eine 1 Script und dort stehen alle Scripts drin:

Wie muß nun das Script aufgebaut sein, damit alles ordentlich funktioniert?

#!/bin/bash

script1
script2
usw


exit

Es sollte so funktionieren wie in einer BAT-Datei (graue DOS-Urzeit) wo dann der Aufruf mit CALL script1 usw. erefolgte.
Schön wäre, wenn man noch einen Errorlewel hätte, der den Erfolg des jeweiligen Scriptes auswertet.

Hat jemand eine Idee
Bin leider noch Newbee.

Danke
Thomas

tuxpaq
Posts: 8
Joined: 23. Nov 2001 16:09

Re: Abarbeitung von Scripten

#2 Post by tuxpaq »

Hallo Thomas,

Eine Abfrage des Errorlevel erreichst Du ueber die interne shell-variable $?
Wenn also script1 so definiert ist, dass es bei einem Fehler mit "exit 1"
aussteigt, kannst Du das danach wieder abfragen...
Bsp:
script1.sh:
#!/bin/sh
./script2.sh
exitcode=$?
echo $exitcode
exit 0
#####

script2.sh:
#!/bin/sh
exit 1
#####

Das klappt aber nur, wenn das aufgerufene (hier) script2 sich nicht von der Shell abkoppelt.
Aendere in script1 den Aufruf von "./script2.sh" in "./script2.sh &" um, schon geht's nimmer.

Hoffe das hilft erst mal.
byTe,
tuxPAQ

Jochen

Re: Abarbeitung von Scripten

#3 Post by Jochen »

@tuxPAQ:

Auch wenn man einen Prozess mittels "&" in den Hintergrund schickt, kommt man noch an den Exitcode: Wenn das aufrufende Skript irgendwann nix mehr zu tun hat oder mit Berechtigung davon ausgehen kann, dass der Kindprozess zu Ende gelaufen ist, einfach ein "wait <i>PID</i>" absetzen. An die PID des Kindprozesses kommst Du mittels "$!" direkt nach Aufruf des Hintergrundprozesses; wenn Du nur einen absetzt, kannst Du auch direkt "wait $!" verwenden. wait wartet dann auf die Beendigung des Kindprozesses und liefert bei Ende (oder sofort, wenn der Prozess schon abgebaut ist) den Exit-Code des Kommandos, das im Hintergrund lief.

@Thomas: Sorry, ist natürlich OT zu Deiner Frage.

Aber wenn beispielsweise die Skripte nur laufen sollen, wenn die Vorgänger erfolgreich waren (also einen Exit-Code gleich Null liefern), kann man dies einfach mittels <blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">skript1 && skript2 && skript3</font><hr></pre></blockquote>erreichen. skript 2 läuft nur, wenn skript1 erfolgreich war, und skript3 läuft nur, wenn skript2 keine Probleme hatte.

Jochen

Post Reply