[Python-de] McMillan Installer, Linux, und der Restart

Gerson Kurz gerson.kurz at pergamon-software.de
Die Jun 10 11:10:56 EDT 2003


Ich habe ein etwas komplexes Szenario, das ich im folgenden zu beschreiben
versuche:

/root/main

[*] ist ein vom McMillan-Installer erzeugtes Python-Programm, das Module im
folder /root/main/buildmain nachlädt.

Das Programm hat einen separaten Thread, der alle 60 Sekunden folgendes
macht:

- mount auf /dev/fd0
- nachschaun, ob sich darauf eine Datei update.cmd befindet.
- falls ja: diese Datei per

os.spawnl(os.P_NOWAIT, "/usr/local/bin/python", "python",
"/media/floppy/update.cmd")

starten

Dieses update.cmd ist ein Pythonscript, welches folgendes tut:

- /-partition rw remounten
- Laufendes /root/main beenden (stopsignal per sockets, warte 5 sekunden auf
shutdown, falls nicht tot kille das programm)
- Programmupdate einspielen
- /root/main neu starten
- 5 sekunden warten
- /-partition ro remounten
- umount /dev/fd0

Läuft /root/main noch nicht, kann mit update.cmd das Programm an sich
hochgefahren werden, der start sollte also rein technisch korrekt sein. Wenn
update.cmd aber aus /root/main heraus gestartet wird, kann nach dem
einspielen des Updates /root/main nicht mehr gestartet werden: das Programm
meldet "struct not found". Beendet man update.cmd und startet /root/main
manuell, geht das - an der neuen Kopie kann es also nicht liegen.

Folgendes habe ich bisher versucht:

- os.spawnl(os.P_NOWAIT, "/root/main", "/root/main")
-> gleiches verhalten

- os.system("/root/main &")
-> gleiches verhalten

- os.chdir("/root")
  os.spawnl(os.P_NOWAIT, ...)
-> gleiches verhalten.

Erstaunlicherweise liefert im Kontext von update.cmd ein
os.popen("ps -A|grep main").readlines() einen "main defunct" eintrag ???
Arg, bitte sagt mir daß das Unix-Prozesshandling nicht so bescheuert ist,
Prozessleichen zu pflegen! (Das letzte mal habe ich sowas unter OS/2
gesehen, da wurden die Dinger "Zombie Prozesse" (sic, IBM doku says so)
genannt)

[*] Für Sicherheitsbedenkenträger: Der PC hat keine Tastatur / Bildschirm
und ist in einem Tresor verschlossen. Disketten kann nur der Techniker
einlegen, wenn jemand (2 Personen) den Tresor geöffnet hat. Der PC läuft
ohne Netzwerk und bootet immer das gleiche Programm.