Gibt es einen Befehl / ein Programm, mit dem ich mein System sofort herunterfahren kann (1 bis 5 Sekunden)?
Update (2015): Vielen Dank an alle, die vorgeschlagen haben, das Gerät über die Steckdose auszuschalten. : D
Update (2016): @technophile schlug vor, der Frage, die die Art des Problems beschreibt, einige Informationen hinzuzufügen - hauptsächlich welches Szenario wollte ich lösen. Hier ist das Szenario, für das diese Frage vor einigen Jahren gestellt wurde.
Wir bauten ein System für den Einsatz in öffentlichen Räumen (Flughäfen, Hotels usw.). Menschen können dieses System zum Surfen im Internet, zum Abrufen ihrer E-Mails oder sogar zum Buchen usw. mit ihren Kreditkarten verwenden. System gebaut wurde, um sicherzustellen, dass ein zweiter Benutzer in keiner Weise Informationen (E-Mail, Kreditkarten) des vorherigen Benutzers dieses Systems erhalten kann, auch wenn Keylogger Art von Software irgendwie installiert werden. Wie hat das System dafür gesorgt? Nun, Details können nicht geteilt werden, da dies keine öffentlichen Informationen sind. Wir haben jedoch eine Möglichkeit entwickelt, ein neues Betriebssystem (als ob es neu installiert worden wäre) für einen neuen Benutzer des Systems bereitzustellen. Das einzige Problem war, dass wir die Maschine herunterfahren und wieder hochfahren mussten, sobald der erste Benutzer die Maschine verlässt.
Und ich wollte, dass das Herunterfahren sofort schnell geht (- deshalb die Frage) und das nächste Booten auch sehr schnell, für das ich eine große Anzahl von Linux-Distributionen von Damn Small Linux über Slackware bis Debian usw. recherchiert und ausprobiert habe separate Geschichte.
quelle
Antworten:
quelle
Ich schlage nicht vor, Folgendes zu tun, wenn Sie nicht aus ganz besonderen Gründen dazu gezwungen werden:
Es ist rauh, brutal und kann als naheliegendes Äquivalent zum Ausstecken des Netzkabels angesehen werden ...
Der richtige Weg ist bei Bedarf
shutdown -h now
mitsudo
vorher.Vielleicht sollte ich den rechtmäßigen Weg sagen ; siehe unten oder besser dr.
Einige Worte mehr , auch bekannt als Die Geschichte, Kapitel I
Am Anfang war der Anfang und es wird bis zum Ende dauern.
Die ganze Linux hängt von der liebevollen Pflege von init [ 1 ] [ 2 ] . Nichtsdestotrotz und nicht ohne ein gewisses Maß an Undankbarkeit gab es eine Zeit, in der der gute Lord Root-Benutzer diese Liebe verraten und plötzlich
kill
mit einer unumstößlichen (-9
) Anweisung beginnen konnte.( Das Book of Etiquette schreibt vor, dass Grafschaften, Herzöge und Markgrafen Benutzer vor a aufrufen müssen
sudo
.)Dann machten einige Zauberer einen Zauber, um Init (aus dem Buch von
man 2 init
) zu beschützen.(Unsere Spione berichten [ U1 ], dass init 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32 handhaben wird.)
Also lernt der gute Lord root-Benutzer die Nachrichten und ändert den Befehl in
kill -ABRT 1
oderkill -SEGV 1
das erzeugt normalerweise a Kernel-Panik und ein Core-Dump.Dies funktioniert, weil init der erste Prozess ist, der ausgeführt wird und die PID-Nummer 1 erhält [ 2b ] .
Dies ist unsicher, unklug und Sie glauben, dass es ein Vorbote für ein schlechtes Omen und einen Fluch ist, aber wenn Sie die Hände nicht materiell aufsetzen und den Stecker ziehen können ...
Der Fluch : Es schreibt nicht in das Protokoll, es bricht nicht alle Prozesse ab und wartet auf deren Beendigung. Es schreibt nicht auf die Festplatte und aktualisiert auch nicht die Inodes. Es macht nicht einmal etwas aus, dass die Optionen der Grafikfenster und der Shell-Historien und viele andere, die außerhalb unserer Vorstellungskraft liegen, gespeichert werden. Wie wir bereits sagten, entspricht dies in etwa dem Herausziehen des Netzkabels oder des Akkus eines Laptops.
Der richtige Weg
"Non nobis, Domine, non nobis, sed nomini tuo da gloriam", das Motto der Tempelritter.
Der rechtmäßige (richtige) Weg ist,
shutdown
[ 3 ]aber damit werden
-h now
sie nicht genug Zeit haben, um so viel zu tun ...Einige Worte mehr , auch bekannt als Die Geschichte, Kapitel II Es waren
einmal einige logische Schritte vom Himmel über den Unix-Leuten:
Tatsächlich vertrauen wir heutzutage nicht mehr auf die Existenz der drei Moirai [ 5 ] der Linux - Welt ,
reboot
,poweroff
undhalt
[ 6 ] : die moderne Wissenschaft vonls -l $(which poweroff halt reboot)
und der vonman reboot
Spreads ein neues Licht auf diesem Alter dunkel und offenbaren uns dass es nur einen wahren Befehl gibt, der alle ihre Optionen analysiert, so dass wir endlich frei sind, nach Aktionen zu fragen, die ihren Befehlsnamen widersprechen! (halt -p
oderreboot -p
fürpoweroff
,shutdown -r
fürreboot
...)Nun, da alles für alle klar und gemütlich zu sein schien, behaupten Gerüchte, [ 7 ] dass in der Unterwelt von systemd toolset [ 8 ] eine Revolution durchgeführt wurde, die die gesamte Überwelt unbemerkt ließ . Dank einer Armee von Rückwärtskompatibilität Beilagen haben wir gar nicht bemerkt , dass Neustart, poweroff, halt [ 6 ] und sogar telinit [ 9 ] und Abschaltung [ 3 ] werden alle bereits auf den neuen König systemctl begrenzt [ 10 ]. Bitte hören Sie die ganze Geschichte mit der Originalstimme von JdeBP The Bard [ 9 ], da ich keinen Atem mehr habe.
Wenn Sie Anhänger des Ubuntu-Kults sind, sind Sie sich möglicherweise noch eine Weile all dieser Behauptungen bewusst [ 11 ] .
Die mittlere Erde von
halt -f
,init
,telinit
,systemctl
Suche nach Lösung schneller als die richtigen , aber auch weise.
Dass Sie sich unter System befinden oder nicht, sollten Sie in der Lage sein, den Computer anzuhalten, ohne alle korrekten Shudown-Prozeduren aufzurufen (und das schneller):
halt -f
: Angabe der Option-f
(beachten Sie, dass Sie-f
das Herunterfahren vermeiden müssen) mit dem obigen Befehl, mitsudo poweroff -f
oder sogar mitsudo reboot -f -h
. In der Tat können wir ausman reboot
(und Äquivalenten) über die Notwendigkeit lesen , die Option anzugeben-f
, um zu vermeiden, dass das Herunterfahren aufgerufen wird:Außerdem können Sie
telinit
[ 2b ] (oderinit
direkt) verwendenum init anzuweisen, den Runlevel zu ändern ... aber wenn ja, warum nicht direkt töten?
Unter systemd können Sie die unwise double Option verwenden
--force --force
Lesen aus dem Systemhandbuch [ 10 ]
Ps> Lassen Sie sich von Varianten aus dem Schwanz JdeBP The Bard [ 7 ] inspirieren .
quelle
Sie können die Maschine sofort ausschalten, ohne die Festplatten zu synchronisieren, indem Sie "o" in / proc / sysrq-trigger als root schreiben.
Als Shell-Skript würde es ungefähr so aussehen
Wenn Sie Berechtigungen für / proc / sysrq-trigger haben, müssen Sie diese nicht über sysctl aktivieren. Diese Option wirkt sich nur auf das Auslösen über die Tastatur aus.
Ich empfehle nicht, dies auf einem Computer mit einem Dateisystem zu tun, das Sie später lesen möchten.
Ich verwende diese Funktion in Google Compute Engine, um Instanzen mit Vorlagen direkt vor der Zehn-Minuten-Marke zu schlachten, um die Kosteneffizienz von Cluster-Jobs zu maximieren. Sie funktioniert hervorragend.
quelle
b
Anstatt vono
zu starten (relevant seit die Frage aktualisiert wurde).Du hast die verwenden Magie SysRq Schlüsselkombination
REISUB
.Wiederholen Sie nach mir: " Elefanten aufziehen ist so extrem langweilig ... "
quelle
Dies sollte auf den meisten gängigen Distributionen funktionieren. Anders als bei
shutdown
vielen anderen Systemen können Sie dies als normaler Benutzer ausführen (kein Sudo erforderlich).Edit: Weiterführende Literatur:
shutdown
undpoweroff
auf Ubuntuhalt
,shutdown
undpoweroff
auf Unix - Systemenquelle
Aufgenommen von einer anderen SE-Site:
Alt+ SysRq+ BIst Instant - Neustart und Alt+ SysRq+ Oist sofortige Abschaltung.
Hinweis: Hier
quelle
Halten Sie die Ein / Aus-Taste etwa 4 Sekunden lang gedrückt, es ist ziemlich schnell.
quelle
Bei bestimmten Linux-Distributionen bietet shutdown die Option -n. (Siehe man shutdown ). Bestimmte Distributionen (wie Ubuntu, die Upstart anstelle von Sysvinit verwenden) unterstützen sein Flag jedoch nicht, und dieses Flag ist (wie aus der Manpage hervorgeht) nicht ohne Risiko. Obwohl ich dies seit Jahren benutze (auf meinem Laptop ist es mir egal, dass alle Daemons ordnungsgemäß beendet werden, es soll nur alles getötet und mein Diskcache geleert werden) (es ist schneller als ein reguläres Herunterfahren und sicherer als das Ziehen des Stecker (und Freunde)). Sie könnten sehen, ob dies Ihr Problem löst.
quelle
Ich habe dieses kleine Skript verwendet, um das System auszuschalten. Eigentlich wird das für einen Streich auf einer "Prototyping" -Maschine verwendet: "Hey, Alter, mal sehen, was diese geilen .sh machen!"
(Dieses Skript imitiert das Gleiche wie Alt+ SysRq+ u/ s/o wie zuvor erläutert.) Natürlich verursache ich keine abnormalen Systembeendigungen (MySQL-Tabellen usw. können abstürzen). Verwenden Sie es daher nur auf Dummy-Computern. Hinweis: Die Synchronisierung kann einige Zeit dauern. Ich habe gesehen, dass das Synchronisieren mehr Zeit in Anspruch nimmt, wenn das System über viel freien Speicher (für den Cache) verfügt und Sie eine Reihe von Dateien auf ein USB-Stick kopieren, aber ich empfehle es sogar für einen Streich.
Bearbeiten: Es ist besser,
sync
anstelle von 's' zusysrq-trigger
schreiben: Schreiben von 's' blockiert nicht die Skriptausführung. Nach der Anforderung, dass der Cache auf die Festplatte geschrieben werden soll, wird der Computer sofort ausgeschaltet. Im Gegensatz zumsync
Befehlsync
wird zurückgegeben, nachdem der Schreibvorgang abgeschlossen ist. Daher wird die Skriptausführung blockiert, bis das Leeren des Caches abgeschlossen ist.quelle
SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done