Aufzucht und Hege von Shell-Scripts: Aufräumen
Zum Programmende aufräumen
Jedes Programm sollte natürlich vor dem finalen exit aufräumen, also ggf. erzeugte temporäre Dateien löschen, evtl. im Hintergrund laufende, von ihm gestartete Prozesse abmurksen usw. Nun kann sich ein Programm aber nicht nur selbst beenden, es kann auch durch Signale von außen abgeschossen werden (passenderweise heißt der entsprechende Befehl kill). Was dann? Hier helfen 2 Maßnahmen: ein wenig Disziplin beim Programmieren und trap:
- Disziplin: Legt temporäre Dateien so ab, dass Ihr sie wiederfindet (z. B. in einem eigenen Verzeichnis) oder merkt Euch, welche temp. Dateien Ihr angelegt habt. Benutzt die Jobkontrolle der Bash (richtig, nachzulesen in man bash), um Hintergrundjobs zu steuern. In umfangreicheren Scripts hat sich für mich eine cleanup-Funktion bewährt, die den Ausputzer macht und gleich mit einem passenden Returncode (übergeben als Argument) das Script beendet. Die kann ich dann auch nutzen, um an allen Stellen im Script sauber auszusteigen, wenn fatale Fehler auftreten.
- trap: Wie der Name schon sagt - es ist eine Falle, die auf Signale scharf ist und dann
zuschnappt. Damit könnt Ihr dafür sorgen, dass beim Empfang bestimmter Signale (siehe - wieder richtig -
man 7 signal) eine definierte Aktion gestartet wird (z. B. eine cleanup-Funktion), oder
auch, dass bestimmte Signale ignoriert werden (meist nicht so ratsam) und noch einiges mehr.
trap "cleanup 1" 1 2 3 15 sorgt dafür, dass Euer Script beim Empfang üblicher "Beende Dich bitte"-Signale die genannte Funktion aufruft.
Gegen zwei Signale kann man sich übrigens nicht wehren: SIGSTOP und SIGKILL veranlassen immer das sofortige Beenden jedes Prozesses (sofern Ihr Eigentümer des Prozesses oder root seid).

