hne
Joined: 11 Jul 2008 Posts: 210 Location: Hannover
|
Posted: 11.05.2011, 14:22 Post subject: autostart.sh wird unvollständig ausgeführt |
|
|
Es kommt vor, daß der die Datei autostart.sh nicht komplett abgearbeitet wird, weil sich die Ausgabe-Konsolen ins Gehege kommen.
Dazu sei vorweg erinnert, daß die Datei /flash/autostart.sh vom Boot-Prozess bereits im Hintergrund gestartet wird.
Wenn man innerhalb des Scriptes autostart.sh zu viele Meldungen auf der Konsole ausgibt, oder gar noch Verzögerungen hat und dann etwas per echo ausgibt, dann kollidieren die Ausgaben aus dem autostart.sh (oder aus Programmen, die im autostart.sh gestartet werden) mit dem Login-Prompt. Der Script autostart.sh wird ohne Fehlermeldungen abgebrochen.
Um das zu vermeiden, sollte man möglichst keine Meldungen innerhalb des Scripts autostart.sh machen und auch die Programme, welche darüber gestartet werden, sollten keine Meldungen ausgeben. Ein echo am Anfang von autostart.sh funktionierte bei Tests noch, sollte aber nur in der Entwicklungsphase benutzt werden.
Eine optimale autostart.sh:
Code: | #!/bin/sh
cd /flash
exec /flash/programm </dev/null >/dev/null 2>&1 |
Für Debugging und zu Testzwecken kann man sich die Melungen in eine Log-Datei schreiben:
Code: | #!/bin/sh
echo "autostart.sh gestartet"
cd /flash
exec /flash/programm </dev/null >/var/log/autostart.log 2>&1 |
Noch besser ist es, wenn das gestartatete Programm sich selber in den Daemon-Modus versetzt, und sich selbsständig von der aktuellen Konsole abkoppelt. In einem C-Programm sind dazu folgende Aufrufe notwendig: (auch als "daemonize" bezeichnet):
Code: | #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
...
pid_t mypid;
mypid = fork();
if (mypid != 0)
exit(0); /* parent exit */
close(0);
close(1);
close(2);
open("/dev/null", O_RDWR | O_NONBLOCK);
open("/dev/null", O_RDWR | O_NONBLOCK);
open("/dev/null", O_RDWR | O_NONBLOCK); |
_________________ Henry Nestler |
|