Re: Server fährt selbständig runter?

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 30 Oct 2012 14:58:05 +0100 (CET)

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.

> [...]
> 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.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
It's trivial to make fun of Microsoft products,
but it takes a real man to make them work,
and a God to make them do anything useful.
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 - 14:58:25 CET

search this site