On Sam, 28 Jun 2003 at 21:43 (+0200), Kristian Koehntopp wrote:
On Sat, Jun 28, 2003 at 08:07:57PM +0200, Jan Trippler wrote:
Ich habe prinzipiell Bauchschmerzen bei bash-Scripts, die mit while true; do done
arbeiten. Sowas sollte man immer zumindest über einen crontab-Job überwachen lassen (man kriegt es selten so abgedichtet, dass es _nie_ abstürzen kann und dann sollte die Möglichkeit eines Wiederanlaufs da sein).
Das kommt darauf an, was man erreichen will. Ein Crontab-Eintrag hat die Chance auf multiple parallele Instanzen desselben Scriptes, wenn die Laufzeit des Scriptes durch was auch immer laenger wird als das Intervall, in dem Cron die Scripte startet. Wenn Du also minütlich Dein Script hochziehst, es aber durch einen hängenden NFS-Server im $PATH länger als eine Minute stehen bleibt, dann stapeln sich die Scripte übereinander.
Ich schrieb was von *Überwachen*, nicht von *bedingungslos neu starten*. Dass man vorher per *pidof*, Lockfile oder mit anderen Mechanismen prüft, ob das Script noch läuft, hatte ich dabei schon im Sinn. [while true]
kann niemals konkurrierende Instanzen haben, sondern es prodziert immer nicht überlappende Iterationen. Den Wiederanlauf regelt man leicht damit, daß man das Script mit einem "respawn"-Eintrag in die /etc/inittab setzt, denn dafür ist init genau da:
kk:235:respawn:/root/bin/meiniterator.sh mit drei parametern
und dann ein telinit q.
Das ist auch eine Möglichkeit. Ich bin aber des Öfteren in Situationen, wo ich möglichst flexibel regeln will, dass eine einstellbare Anzahl paralleler Instanzen laufen soll (wenn z. B. eine Queue abhängig von der Last - resp. der Anzahl der zu verarbeitenden Dateien - reagieren können soll). Dann ist IMHO crontab besser geeignet. Mit diesen Gedanken im Hintergrund hatte ich auf cron verwiesen. Jan