Unterschied reboot, shutdown -r

christoph

Used Register
Guten Morgen zusammen :)

gibt es einen Unterschied zwischen reboot und shutdown -r ?

Ich frage weil ich im Fluxbox Menü Einträge zum Ausschalten und Neustarten hinzufügen wollte.
Code:
[exec] (Shutdown) {shutdown -p now}
funktioniert problemlos.
Bei
Code:
[exec] (Reboot) {reboot}
tut sich garnichts.
Code:
shutdown -r now
hingegen funktioniert.
In xterm oder der Konsole funktioniert reboot auch einwandfrei. Mein Benutzer ist selbstverständlich in der operaters Gruppe.

Kann das jemand aufklären? Vielen Dank
 
Also, erst einmal allgemein gesagt:
- shutdown(8) ist die korrekte Weise das System herunterzufahren und sollte immer genutzt werden. shutdown sendet SIGTERM an init(8), was wiederum /etc/rc.shutdown ausführt, wodurch alle Dienste hoffentlich beendet werden. Anschließend wird ein SIGTERM an alle noch verbliebenden Prozesse gesendet, wirkt das nicht, folgt nach 30 Sekunden ein SIGKILL. Erst wenn keine Prozesse mehr laufen, wird der reboot() Syscall aufgerufen, der die Kernelseite des Herunterfahrens einleitet.

- reboot(8) und halt(8) hießen unter BSD traditionell "fasthalt" und "fastreboot". Sie senden einfach ein SIGTERM an alle Prozesse, kurz darauf an alle überlebenden ein SIGKILL und abschließend senden sie reboot() an den Kernel.

shutdown(8) ist die wesentlich sanftere Methode, da es Diensten Zeit gibt sich korrekt zu beenden. Gerade einige Serverdienste - vor allem Datenbanken - mögen es nicht nicht einfach abgewürgt zu werden. Die Nutzung von halt und reboot ist daher gefährlich, denn sie kann schlimmstenfalls bei solchen Diensten zur Katastrophe mit Datenverlust führen. Entsprechend werden auch die Rechte gesetzt:

Code:
-r-sr-x---  1 root  operator    16K 20 Feb 19:06 /sbin/shutdown
-r-xr-xr-x  4 root  wheel   8,9K 20 Feb 19:06 /sbin/reboot
-r-xr-xr-x  4 root  wheel   8,9K 20 Feb 19:06 /sbin/halt

Grundsätzlich kann der reboot() Syscall nur vom Superuser root aus abgesetzt werden, sonst verweigert der Kernel die Ausführung und gibt EPERM zurück. Das shutdown Binary ist SETUID, d.h. alle Nutzer in der Gruppe "Operator" können es ausführen, es wechselt in den root und setzt dann den Syscall ab. reboot und halt sind dies nicht, d.h. nur root direkt kann die Programme erfolgreich ausführen.
 
Aha, das erklärt es natürlich!
Bin nicht auf die Idee gekommen, dass reboot nicht von operators ausgeführt werden könnte.

Vielen Dank für die ausführliche Antwort, Yamagi.
 
Kleiner Nachtrag: die Behauptung in meinem Eröffnungspost, dass reboot im Terminal als normaler Benutzer funktioniert stimmt natürlich nicht. War wohl schon etwas spät gestern als ich damit beschäftigt war ;)
 
Zurück
Oben