Hi, ich habe mir vorhin mal die Quellen des init und einiger Power-Dämonen angeschaut, nachdem die UPS-HOWTO mir nicht viel geholfen hat. Was mir fehlt sind generelle Informationen, wie init, /etc/inittab und /etc/powerstatus zusammenarbeiten. So wie ich das sehe passiert folgendes: Ein Dämon kommuniziert mit der USV und erhält prinzipiell folgendes zurück: 1. Alles OK 2. Strom ist weg 3. Batterie ist gleich alle Bei 1. wird vom Dämon die Datei /etc/powerstatus mir dem Inhalt OK angelegt. Danach bekommt init das Signal SIGPWR. init schaut sich die Datei /etc/powerstatus an, findet OK und reagiert so, wie in /etc/inittab unter dem Eintrag powerokwait eingestellt. Sinnvollerweise gibt es diesen Eintrag zweimal. Einmal für den RunLevel SingleUser, dann soll init wieder in MultiUser fahren. Und zum zweiten, falls ein shutdown schon gesetzt wurde, wird er gecancelt. Bei 2. wird vom Dämon die Datei /etc/powerstatus mit dem Inhalt FAIL angelegt. Danach bekommt init das Signal SIGPWR. init schaut sich die Datei /etc/powerstatus an, findet FAIL und reagiert. Wie init reagiert, habe ich nicht herausgefunden. Der Abschnitt im Quellcode sieht so aus: /* Start up powerfail entries. */ void DoPowerFail(int pwrstat) { CHILD *ch; /* Tell powerwait & powerfail entries to start up */ for(ch = family; ch; ch = ch->next) { if (pwrstat == 'O') { /* The power is good again. */ if (ch->action == POWEROKWAIT) ch->flags &= ~XECUTED; } else if (pwrstat == 'L') { /* Low battery, shut down now. */ if (ch->action == POWERFAILNOW) ch->flags &= ~XECUTED; } else { /* Power is failing */ if (ch->action == POWERFAIL || ch->action == POWERWAIT) ch->flags &= ~XECUTED; } } } Der letzte else ist hier ausschlaggebend. Irgendwie blicke ich den Code hier nicht. Wer kann mir sagen, welche Aktion hier ausgelöst wird? Ich hätte gerne, daß init den Rechner in SingleUser fährt. Bei 3. wird vom Dämon die Datei /etc/powerstatus mit dem Inhalt LOWBATT angelegt. Danach bekommt init das Signal SIGPWR. init schaut sich die Datei /etc/powerstatus an, findet LOWBATT und reagiert so, wie in /etc/inittab unter dem Eintrag powerfailnow eingestellt. Sinnvollerweise solte hier in den RunLevel HALT gefahren werden. Falls der Strom dann wieder kommt, fährt der Rechner nicht wieder hoch. Gibt es hier eine bessere Alternative? Ideal wäre es, wenn die USV die Stromzufuhr nach einer sinvollen Wartezeit komplett unterbricht. Dann könnte der Rechner in HALT fahren, wird abgeschaltet und kommt alleine wieder hoch, wenn der Strom wieder da ist. So, nochmal was ich eigentlich will: MultiUser: Strom weg -> in 5 Minuten SingleUser Strom wieder da -> SingleUser hat sich erledigt Batterie schwach -> Halt SingleUser: Strom weg -> ignorieren Strom wieder da -> MultiUser Batterie schwach -> Halt Wie bekomme ich das geregelt, vorausgesetzt mein Dämon füllt die Datei /etc/powerstatus richtig? Mfg Stefan Krister -- Um aus der Liste ausgetragen zu werden, eine Mail an majordomo@suse.com schicken, mit dem Text: unsubscribe suse-linux
participants (1)
-
krs@treu-elektro.de