On Thu, Mar 09, 2000 at 23:08 +0100, Peter Blancke wrote:
Gestern schrieb ich, dass folgendes Skript per Hand aufgerufen einwandfrei laeuft, nicht aber, wenn man den Aufruf als root in Crontab eintraegt.
Das liegt meist auch an Unterschieden zwischen interaktivem Aufruf aus einer Shell mit User dran und unbeabsichtigtem Lauf aus Boot- oder Hintergrund-Mechanismen: Umgebungsvariablen, Pfade, etc. Aber das ist hier nicht das Problem, sondern nur ein Tip fuer aehnliche Probleme.
Das Skript lautet:
#!/bin/sh /sbin/init.d/i4l stop /sbin/init.d/i4l_hardware stop /sbin/init.d/i4l_hardware start /sbin/init.d/i4l start /sbin/route add default ippp0
Unter Crontab gestartet, bleibt ein "Zombie" haengen.
Jetzt habe ich herausgefunden, dass der Zombie bei den beiden Zeilen
/sbin/init.d/i4l_hardware stop /sbin/init.d/i4l_hardware start
entsteht. Wenn ich diese auskommentiere, laeuft das Script brav durch,
Zombies sind an sich nichts Schlimmes: Da endet nur ein Prozess, ohne dass dessen Elternprozess seinen Exitstatus ausgewertet hat. Das kann ja noch passieren, und Ressourcen sind ausser einer Prozessbeschreibung keine mehr gebunden (wird hier immer wieder gefragt und beantwortet). Den Effekt beobachte ich hier auch immer, wenn cronjobs "laenger dauern" (Monitore oder Dialoge starten, tail -f auf Logfiles lassen, usw). crond(8) will noch die Ausgaben wegfangen und per Mail verschicken. Meist gammelt dann auch im mailq(1) output eine offene Message herum. In diesem Zusammenhang: haengt im i4l_hardware nicht der isdnlog drin? Oder werden da andere Prozesse in den Hintergrund geschoben und laufen weiter? Dummerweise habe ich auch mit nohup(1) keine Erfolge bei aehnlichen Jobs gehabt. Aber ich habe dann einfach nicht weiter gesucht -- es laeuft ja alles und ein Zombie ist kein Problem. Vielleicht hilft Dir at(1) weiter. Falls Du dort den beobachteten Effekt nicht hast, kannst Du damit crond(8) emulieren aehnlich wie man manchmal mit signal(2) umgeht: Starte mit at(1) ein Script, das die eigentliche Funktion ausfuehrt und sich selbst wieder mit at(1) auf Halde legt. Falls at(1) die Loesung ist, tu das hier bitte kund.
Vielleicht hilft das jemanden, mir zu helfen. Natuerlich hat das Script Ausfuehrungsrechte fuer root.
Klar, sonst wuerde ja GAR NICHTS passieren. BTW kriegst Du den gewollten Effekt (Route durch ippp0) sicher auch mit dem "offiziellen" Weg: Wer "i4l start" und "i4l_hardware start" ruft, sollte auch "route start" sagen. Sieh Dir mal spasseshalber unter diesem Aspekt "ls /sbin/init.d/rc2.d/S*" an. Auch das kommt hier regelmaessig vorbei (oder tat es frueher immer wieder). virtually yours 82D1 9B9C 01DC 4FB4 D7B4 61BE 3F49 4F77 72DE DA76 Gerhard Sittig true | mail -s "get gpg key" Gerhard.Sittig@gmx.net -- If you don't understand or are scared by any of the above ask your parents or an adult to help you.