Re: Server fährt selbständig runter?

From: Bernd Walter <ticso(at)cicely7.cicely.de>
Date: Tue, 30 Oct 2012 16:41:42 +0100

On Tue, Oct 30, 2012 at 02:58:05PM +0100, Oliver Fromme wrote:
> Bernd Walter wrote:
> > Oliver Fromme wrote:
> > > Rainer Duffner wrote:
> > > > [...]
> > > > Oct 27 03:09:29 IP rc.shutdown 0d [user.notice] rc.shutdown: 90 second
> > > > watchdog timeout expired. Shutdown terminated.
> > > > Oct 27 03:09:29 IP init 21 [auth.alert] init: /bin/sh on /etc/rc.shut
> > > > down terminated abnormally, going to single user mode
> > > > [...]
> > >
> > > Mein erster Verdacht wäre, dass in irgendeinem Skript, das
> > > als root läuft, ein Tippfehler oder logischer Fehler ist,
> > > der dazu führt, dass ein Signal (SIGTERM, SIGINT, SIGUSR1
> > > oder SIGUSR2) an init (PID 1) geschickt wird. Skripte, die
> > > irgendwelche Daemonen bzw. Services restarten, würde ich
> > > mal gründlich prüfen.
> >
> > Wäre auch mein erster Verdacht.
> > Da der Rechner einen sauberen shutdown to single user macht, wird
> > das ein SIGTERM gewesen sein.
>
> Nicht unbedingt, es kann auch ein anderes der oben genannten
> Signale gewesen sein. In den Single-user-mode geht er, weil
> das rc.shutdown-Skript nicht erfolgreich war.

Das Script hat einen Timeout gehabt und keinen Fehler.
Wenn ich einen Rechner mit power-down runter fahren möchte
und dann ein Programm nicht schnell genug beended, dann möchte
ich nicht, dass der Rechner weiterhin Strom braucht.
Erst recht möpchte ich nicht, dass der bei einem reboot nicht neu
startet, sondern im Single User hängen bleibt - man stelle sich
das bei einem Headless System vor.
Ich fände das Fatal, wenn das stimmen würde.

> > [...]
> > Falls möglich mal in Jails verlagern, dann können die Prozesse keinen
> > SIGTERM an den init schicken.
>
> Gute Idee.
>
> Falls Jails nicht ohne großen Aufwand möglich sind (oder gar
> nicht; solche Fälle gibt's ja), dann kann man alternativ auch
> mac_partition(4) verwenden. Das ist nicht schwer, auch wenn
> man noch nie etwas mit dem MAC-Framework gemacht hat.
>
> Kochrezept:
>
> - "kldload mac_partition" eingeben. Damit das beim Booten
> automatisch passiert, die Zeile mac_partition_load="YES"
> in /boot/loader.conf hinzufügen. (Voraussetzung ist
> "options MAC" im Kernel. In GENERIC ist dies bereits
> enthalten.)
>
> - Jetzt kann man einfach beliebige Dienste und Skripte mit
> setpmac(8) starten. Zum Beispiel:
> # setpmac partition/3 /usr/local/etc/rc.d/apache22 start
>
> Das Label (in diesem Fall "partition/3") wird automatisch an
> Child-Prozesse weitervererbt. Prozesse mit diesem Label
> können nur solche Prozesse sehen (und killen!), die das
> gleiche Label haben. Prozesse ohne Label sehen nach wie
> vor alles. (Die Zahl kann zwischen 1 und 65535 liegen.)
>
> Nach obigen Kommando läuft also der Apache mit allen seinen
> Child-Prozessen mit dem Label "partition/3". Führt man
> später das Skript auf die gleiche Weise mit dem Argument
> "stop" oder "restart" aus (wieder mit setpmac partition/3,
> natürlich), dann kann man sicher sein, dass das Skript *NUR*
> den Apache stoppen bzw. restarten kann, sonst nichts. Ein
> killen von init (und somit ein Shutdown) ist nicht möglich.
>
> Man muss natürlich sicherstellen, dass die jeweiligen Start-/
> Stop-Skripte _immer_ mit dem entsprechenden setpmac-Kommando
> aufgerufen werden. Das kann man z.B. mit einem kleinen
> Wrapper machen.

Auch eine Art Leute langsam an MAC ran zu führen.

-- 
B.Walter <bernd@bwct.de> http://www.bwct.de
Modbus/TCP Ethernet I/O Baugruppen, ARM basierte FreeBSD Rechner uvm.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 30 Oct 2012 - 16:42:07 CET

search this site