Wie kann man einen Computer sofort (1 bis 5 Sekunden) ohne Verwendung eines physischen Schalters / einer physischen Steckdose herunterfahren?

17

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.

choc
quelle
1
Da der schnellste Code derjenige ist, der nicht ausgeführt wird, ist es der schnellste Weg, ein System herunterzufahren, es nicht einzuschalten. Erklären Sie, was Sie erreichen möchten, wenn Sie eine bestimmte Antwort benötigen.
Dmitry Grigoryev
2
@ Sam152 welche wand?
Choc
Wollten Sie auch "ohne mein System zu beschädigen" angeben, oder ist das kein Problem?
Technophile
@Technophile keinen dauerhaften Schaden an meinem System natürlich. Aber was hast du vor?
Choc
Mein Ziel ist es zu klären, was Sie fragen und was Sie versuchen zu tun. Ich arbeite in der Elektronik; bedeutet "sofort" 1 Sekunde? 1ms? 1us? 1ns? Sind Sie einfach ungeduldig oder gibt es spezielle Bedürfnisse? Was sind die Konsequenzen einer (zum Beispiel) 6 Sekunden dauernden Abschaltzeit? Ich arbeite mit einem eingebetteten System, das die SD-Karte beschädigt, wenn das Herunterfahren länger als 5 Sekunden dauert, wenn der Netzschalter gedrückt wird. Was tust du?
Technophile

Antworten:

31
sudo shutdown -h now
Felix
quelle
9
Das würde ein System nicht sofort herunterfahren . ;)
Marcel Korpel
14
@ Marcel Korpel: So schnell wie man sollte, ohne sein System zu beschädigen;)
Felix
@Felix - Ich höre immer wieder, dass Linux ein sehr robustes System ist und nicht mit den gleichen "harten Neustarts" zurechtkommt wie mein Windows? Wäre überraschend;)
Gnoupi
2
@ Gnoupi: Kein Betriebssystem kann ohne eine gewisse Anfälligkeit für ein abruptes Herunterfahren erstellt werden. Andernfalls besteht die Antwort auf die schnellste Abschaltmethode darin, das Netzkabel zu ziehen.
Harrymc
1
Bei einigen Versionen unterscheidet sich die Syntax. "sudo shutdown -g0 -y -i5" (Solaris). Und natürlich, nur um es schwierig zu machen, kann der genaue Wert nach "i" für das Herunterfahren auf verschiedenen Systemen unterschiedlich sein. Ich glaube, es ist 0 auf vielen anderen Systemen zum Herunterfahren. Seufzer. Muss Standards lieben, so viele zur Auswahl!
Brian Knoblauch
14

Ich schlage nicht vor, Folgendes zu tun, wenn Sie nicht aus ganz besonderen Gründen dazu gezwungen werden:

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

Es ist rauh, brutal und kann als naheliegendes Äquivalent zum Ausstecken des Netzkabels angesehen werden ...

Der richtige Weg ist bei Bedarf shutdown -h nowmit sudovorher.
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 killmit 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.

Die einzigen Signale, die an Prozess-ID 1, den Init-Prozess, gesendet werden können, sind solche, für die init explizit Signalhandler installiert hat. Auf diese Weise wird sichergestellt, dass das System nicht versehentlich heruntergefahren wird.

(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 1oder kill -SEGV 1das 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 ]

sudo shutdown -h now

Herunterfahren sorgt dafür, dass das System auf sichere Weise heruntergefahren wird. Alle angemeldeten Benutzer werden benachrichtigt, dass das System ausfällt und ...

aber damit werden -h nowsie 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:

Sobald Systemprozesse beendet und Dateisysteme abgemeldet wurden, wird das System automatisch angehalten / ausgeschaltet oder neu gestartet. Dies geschieht mit dem Befehl halt oder reboot, der die Änderungen mit den Festplatten synchronisiert und dann das eigentliche Anhalten / Ausschalten oder Neustarten durchführt. [ 4 ]

Tatsächlich vertrauen wir heutzutage nicht mehr auf die Existenz der drei Moirai [ 5 ] der Linux - Welt , reboot, poweroffund halt[ 6 ] : die moderne Wissenschaft von ls -l $(which poweroff halt reboot)und der von man rebootSpreads 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 -poder reboot -pfür poweroff, shutdown -rfür reboot...)

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.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

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):

  1. halt -f: Angabe der Option-f (beachten Sie, dass Sie -fdas Herunterfahren vermeiden müssen) mit dem obigen Befehl, mit sudo poweroff -foder sogar mit sudo reboot -f -h. In der Tat können wir aus man reboot(und Äquivalenten) über die Notwendigkeit lesen , die Option anzugeben -f, um zu vermeiden, dass das Herunterfahren aufgerufen wird:

    Wenn dieses Tool mit --force oder Runlevel 0 oder 6 aufgerufen wird , ruft es den Systemaufruf reboot (2) auf (mit dem übergebenen Argument REBOOTCOMMAND) und startet das System direkt neu .

    Andernfalls wird einfach das Tool shutdown (8) mit den entsprechenden Argumenten aufgerufen, ohne das Argument REBOOTCOMMAND zu übergeben.

    -f, --force
    nicht shutdown (8) auf und führt stattdessen die eigentliche Aktion aus, die Sie vom Namen erwarten würden .

  2. Außerdem können Sie telinit [ 2b ] (oderinitdirekt) verwenden

    sudo telinit 0    # or 6
    

    um init anzuweisen, den Runlevel zu ändern ... aber wenn ja, warum nicht direkt töten?

  3. Unter systemd können Sie die unwise double Option verwenden --force --force

    systemctl --force --force poweroff  
    

    Lesen aus dem Systemhandbuch [ 10 ]

    -f, --force Überschreibt
    bei Verwendung mit enable alle vorhandenen in Konflikt stehenden Symlinks.
    Bei Verwendung mit halt, poweroff,reboot oder kexec, führen Sie den ausgewählten Vorgang ohne alle Einheiten heruntergefahren. Alle Prozesse werden jedoch gewaltsam beendet, und alle Dateisysteme werden nicht oder nur mit Lesezugriff erneut bereitgestellt. Dies ist daher eine drastische, aber relativ sichere Option, um einen sofortigen Neustart anzufordern. Wenn --force für diese Vorgänge zweimal angegeben wird, werden sie sofort ausgeführt, ohne dass Prozesse beendet oder Dateisysteme abgemeldet werden. Warnung: Das zweimalige Angeben von --force bei diesen Vorgängen kann zu Datenverlust führen.

Ps> Lassen Sie sich von Varianten aus dem Schwanz JdeBP The Bard [ 7 ] inspirieren .

Hastur
quelle
9

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

#!/bin/sh
echo o >/proc/sysrq-trigger

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.

Aaron Muir Hamilton
quelle
5
Dies ist die beste Antwort auf diese Frage. OP gibt eindeutig an, dass er das System auf ähnliche Weise herunterfahren möchte, als ob es vom Stromnetz getrennt wäre. Es ist ihnen egal, ob es beschädigt ist oder ob es "richtig" gemacht wird. Ich verstehe nicht, warum das niemand verstehen kann.
Petr
1
b Anstatt von o zu starten (relevant seit die Frage aktualisiert wurde).
Kamil Maciorowski
7

Du hast die verwenden Magie SysRq Schlüsselkombination REISUB.

Wiederholen Sie nach mir: " Elefanten aufziehen ist so extrem langweilig ... "

eleven81
quelle
2
Nein, REISUB startet es neu. REISUO wird heruntergefahren. Oder einfach O.
Benoit
3

Aufgenommen von einer anderen SE-Site:

Alt+ SysRq+ BIst Instant - Neustart und Alt+ SysRq+ Oist sofortige Abschaltung.


Hinweis: Hier

cst1992
quelle
2
Anscheinend haben Sie den Verweis verpasst und zitieren Ihre Antwort, dann werde ich meine Abstimmung umkehren
Francisco Tapia
Dies ist die ursprüngliche Antwort: askubuntu.com/a/56072
cst1992
2

Halten Sie die Ein / Aus-Taste etwa 4 Sekunden lang gedrückt, es ist ziemlich schnell.

Camilo Martin
quelle
1
In diesem
Fall ist das Umlegen
Das ist das gleiche wie bei jeder anderen Methode zum Herunterfahren, vorausgesetzt, das Betriebssystem führt die Energieverwaltung durch.
Harrymc
1
Wenn Sie tatsächlich nicht ein paar Sekunden warten können und die Stromversorgung unterbrechen möchten, verwenden Sie ein Journal-Dateisystem wie ext3 / ext4, damit Sie nicht so viele Daten durch ungeschriebene Schreibvorgänge verlieren.
CarlF
Wenn Sie nicht auf der Suche nach einer nicht programmgesteuerten / nicht softwaregesteuerten Methode zum Herunterfahren sind, ist der @ Gnoupi-Vorschlag viel schneller. ;)
choc
2

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.

amo-ej1
quelle
2

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!"

#!/bin/bash
echo 1 > /proc/sys/kernel/sysrq-trigger; #enables sysrq triggers
echo u > /proc/sysrq-trigger # remount the system as ready only
#edited# echo s > /proc/sysrq-trigger # sync all write-pending data to disk
sync
echo o > /proc/sysrq-trigger # shut off the system power.

(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, syncanstelle von 's' zu sysrq-triggerschreiben: 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 zum syncBefehl syncwird zurückgegeben, nachdem der Schreibvorgang abgeschlossen ist. Daher wird die Skriptausführung blockiert, bis das Leeren des Caches abgeschlossen ist.

Dankó Dávid
quelle
1
Solltest du nicht vor dir stehen? Auch als Schleife:SEQUENCE=(s u o); for i in "${SEQUENCE[@]}"; do sleep 3; printf "${i}" > /proc/sysrq-trigger; done
Que Quotion