Frage zu Shell Skripten
Hallo, gibt es eine möglichkeit in einem Skript einige Anweisungen anzugeben, die garantiert ausgeführt werden. Also auch wenn ich das Skript mit Ctrl-C abbreche oder zum Beispiel ein aus dem Skript aufgerufenes Programm mit Error terminiert? Also in etwa so etwas wie die try....finally anweisung in pascal. Das Problem ist, das ich ein skript habe das eine datei erstellt, die anderer Skripten anzeigt das dieses Skript gerade aktiv ist. Also eine Art Lock-Datei. Leider wird diese manchmal nicht gelöscht. zB wenn ein aufgerufenes Programm (fetchmail) mit Code 15 terminiert. Danke, tschü
Am Mon, 12 Mär 2001 schrieb Danilo Reinhardt:
Hallo,
gibt es eine möglichkeit in einem Skript einige Anweisungen anzugeben, die garantiert ausgeführt werden. Also auch wenn ich das Skript mit Ctrl-C abbreche oder zum Beispiel ein aus dem Skript aufgerufenes Programm mit Error terminiert?
Also in etwa so etwas wie die try....finally anweisung in pascal.
Das Problem ist, das ich ein skript habe das eine datei erstellt, die anderer Skripten anzeigt das dieses Skript gerade aktiv ist. Also eine Art Lock-Datei. Leider wird diese manchmal nicht gelöscht. zB wenn ein aufgerufenes Programm (fetchmail) mit Code 15 terminiert.
Mußt Du das Signal mit trap abfangen und behandeln ... (hab gerade keine Doku-Idee, wahrscheinlich man bash oder so... -- may the tux be with You! Joerg Thuemmler sysadmin@vordruckleitverlag.de
Hallo Danilo, * Am 12.03.2001 um 16:14 Uhr schrieb Danilo Reinhardt:
gibt es eine möglichkeit in einem Skript einige Anweisungen anzugeben, die garantiert ausgeführt werden. Also auch wenn ich das Skript mit Ctrl-C abbreche oder zum Beispiel ein aus dem Skript aufgerufenes Programm mit Error terminiert?
Also in etwa so etwas wie die try....finally anweisung in pascal.
verwende doch einfach das Bash-Kommando 'trap' - hier ein kleines Beispiel: #!/bin/bash onExit() { echo "hier könnten z.B. Dateien gelöscht werden" exit } # rufe bei SIGHUP, SIGINT, SIGQUIT und SIGTERM # die Funktion 'onError' auf. # # Liste aller möglichen Signals mit 'trap -l' trap onExit 1 2 3 15 while : do date sleep 1 done Mit Ctrl-C wird die Schleife abgebrochen und 'onExit' aufgerufen. MfG. Jürgen -- Die letzten Worte eines Sportlehrers: "Alle Speere zu miiiir! (Xavi)" / Registered Linux-User #130804 http://counter.li.org \ \ Linux Stammtisch Bremerhaven http://linux.hs-bremerhaven.de /
* Danilo Reinhardt schrieb am 12.Mär.2001:
gibt es eine möglichkeit in einem Skript einige Anweisungen anzugeben, die garantiert ausgeführt werden. Also auch wenn ich das Skript mit Ctrl-C abbreche oder zum Beispiel ein aus dem Skript aufgerufenes Programm mit Error terminiert?
Nein geht nicht. Im Bezug zu CTRL-C hast Du ja schon Hinweise auf trap bekommen, aber mit einem kill -9 kanst Du den Prozeß immer abbrechen, ohne was dagegen machen zu können. Wenn ein Programm ein Error hat, so ist es egal und es geht weiter. Oder kann es sein, daß das Programm ein Signal abgibt? Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
On Mon, Mär 12, 2001 at 07:43:23 +0100, Bernd Brodesser wrote:
* Danilo Reinhardt schrieb am 12.Mär.2001:
gibt es eine möglichkeit in einem Skript einige Anweisungen anzugeben, die garantiert ausgeführt werden. Also auch wenn ich das Skript mit Ctrl-C abbreche oder zum Beispiel ein aus dem Skript aufgerufenes Programm mit Error terminiert?
Nein geht nicht. Im Bezug zu CTRL-C hast Du ja schon Hinweise auf trap bekommen, aber mit einem kill -9 kanst Du den Prozeß immer abbrechen, ohne was dagegen machen zu können.
Wenn ein Programm ein Error hat, so ist es egal und es geht weiter. Oder kann es sein, daß das Programm ein Signal abgibt?
Um auch die nicht abzufangenden Fälle abzufangen ;-) hilft Dir vielleicht folgender Ansatz: Schreib beim Erzeugen des Lockfiles die PID (ID des Prozesses) weg und werte (statt einfach nur die Existenz des Lockfiles auszuwerten) diese PID aus. Wenn kein Prozess mit dieser PID mehr existiert, dann ist er wohl aus irgendeinem Grund nicht mehr dazu gekommen, die Datei zu löschen. Das könnte so aussehen: <untested> lockfile=/pfad/zur/lockdatei if test -f $lockfile; then ps a `cat $lockfile` >/dev/null 2>&1 || rm -f $lockfile fi test -f $lockfile && exit -1 || echo $$ >$lockfile </untested> Jan
participants (5)
-
Bernd Brodesser
-
Danilo Reinhardt
-
Jan.Trippler@t-online.de
-
Joerg Thuemmler
-
Juergen Schwarting