Verzeichnisse und Dateien des init-Prozesses
Neben der inittab gibt es noch weitere Dateien und Verzeichnisse, die der init-Prozess ausliest.Allerdings ergeben sich hier je nach verwendeter Distribution massive Unterschiede, was sich vor allem in der Platzierung von Skripten bemerkbar macht. Diese Skripte sind beim Wechsel der Runlevels involviert
- Red-Hat basierte Systeme arbeiten gerne mit einem monolythischen Initialisierungsskript
- Die anderen Distributionen verwenden eher kleinere Einzelskripte
- Basisverzeichnis ist bei den meisten Systemen leicht auffindbar:
/etc/init.d oder /etc/rc.d - die dort liegenden Skripte können auch im laufenden Betrieb von Hand ausgeführt werden z.B.:
/etc/init.d/sendmail stop beendet sendmail
/etc/rc.d/sendmail stop
/etc/init.d/sendmail start startet sendmail wieder
/etc/rc.d/sendmail start - mögliche Übergabeparameter kann man dem Skript selbst entnehmen. start und stop können alle! Zusätzliche Stati können auch noch sein: status (Statusabfrage des zugehörigen Daemons) und reload.
- Reload sendet einem Programm ein SIGHUB, welches das Programm dazu veranlasst, die Konfigurationsdatei neu einzulesen.
- aus den Skripten kann man auch Informationen herausfiltern, z.B. in welchem Runlevel laufen welche Anwendungen, welche Dienste werden für den Start vorausgesetzt. Sucht man in Verbindung mit "case" die Variable $1, findet man auch die möglichen Parameter, die das Skript versteht (start, stop, reload, etc.)
- init ruft diese Parameter dann zu einem vorbestimmten Zeitpunkt auf
- Bei vielen Distributionen werden in dem Verzeichnis /etc/init.d bzw. /etc/rc.d Unterverzeichnisse für die verschiedenen Runlevel angelegt. In diesen Unterverzeichnissen liegen Softlinks, die auf die Startskripte zeigen, die in dem Runlevel gestartet werden sollen. (Bei Ubuntu liegen die Startskripte unter /etc/init.d und es gibt zusätzlich entsprechende Unterverzeichnisse für die verschiedenen Runlevels unter /etc/rc.d)
- Die Softlinks sind mit zusätzlichen Bezeichnern versehen, die dem init-Prozess sagen, in welcher Reihenfolge die Dienste und Daemonen initialisiert werden sollen. Alle Softlinks, die z.B. mit einem S versehen wurden, werden direkt zum Start ausgeführt, die Nummer hinter dem Buchstaben beschreibt ihren Platz in der Abarbeitungs-Reihenfolge (S = Start, K = Kill)
- Das Skript kann aufgrund des Aufruftyps unterscheiden, ob es den Daemon starten oder stoppen soll (wobei mir noch nicht ganz klar ist, wie...) Laut meinem Buch über die Variable $0, die ich jedoch in den Skripten von Ubuntu nicht finden konnte (wahrscheinlich, da Ubuntu mehr mit Units als mit Skripten arbeitet)
Runlevel-Wechsel, Herunterfahren, Neustart
- runlevel in welchem Runlevel befindet sich das System. Mein Ubuntu 15.10 befindet sich in Runlevel 5, der Server befindet sich in Runlevel 2, der RedHat Server befindet sich in Runlevel 3. Laut Ausführung soll der Befehl auch den vorhergehenden Runlevel ausgeben, jedoch bei Ubuntu und RedHat ist diese Angabe immer ein N, welches ich noch nicht zuordnen kann
- Um ein Runlevel zu wechseln, verwendet man den Befehl init in Verbindung mit dem entsprechenden Runlevel: init 0 schaltet das System ab
init 6 startet es neu.
Diese beiden Runlevels funktionieren auch in meinen VMs. Jedoch init 3 hatte ein nicht sauberes Runterfahren der VM zur Folge, so dass ich die VM manuell stoppen musste - telinit ist ebenfalls ein Befehl der verwendet werden kann, der aber heutzutage nur noch einen Softlink auf init darstellt
- Weitere Methoden um ein System herunterzufahren oder neuzustarten sind:
- halt sehr schnelles Herunterfahren des Systems. Vorher besser sync ausführen, um den Festplatten die Gelegenheit zu geben, den Cache-Inhalt zu schreiben
- reboot das System wird rebootet
- poweroff das System wird ausgeschaltet
- shutdown dieser Befehl ist die sauberste Methode, um das System herunter zu fahren und sollte Mittel der Wahl sein. Hier werden alle Konsolennutzer vor dem Herunterfahren gewarnt und alle noch laufenden Programme werden mit Signal 15 heruntergefahren. Sollten sie in einer angemessenen Zeitspanne nicht down sein, werden sie mit Signal 9 gewaltsam terminiert.
- wichtige Optionen sind:
-r für reboot
-h für halt
-t für time (in Sekunden, veraltet)
-k nur Konsolenmeldung senden, aber nicht herunterfahren (es muss aber trotzdem eine Zeit angegeben werden)
-f kein fsck bei Fälligkeit während des Neustarts
-F nach Neustart fsck erzwingen
+xy Angabe der Zeit in Minuten, wann das System runtergefahren wird - Beispiel: shutdown -f -r now -> Der Computer wird sofort neu gestartet und beim Start wird fsck nicht ausgeführt. Das kann z.B. notwendig sein, wenn ein Produktionsserver wegen einem Kernelupdate neu gebootet werden muss, man aber nicht so lange warten kann, bis fsck alle fälligen Partitionen überprüft hat. PRÜFUNGSRELEVANT!!!
- shutdown -c Aufheben des Shutdownbefehls
- wall Alternative zum Befehl shutdown -k ist das Konsolenprogramm wall in Kombination mit echo
echo "Der Server wird in Kuerze heruntergefahren!" | wall - Schickt man nur die Konsolenmeldung durch die Gegend muss man die Meldungen auf den benachrichtigten Konsolen mit Str+c beenden
Keine Kommentare:
Kommentar veröffentlichen