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 messageReceived on Tue 30 Oct 2012 - 14:58:25 CET