Wie deaktiviere ich das Herunterfahren, damit ein wichtiger Prozess nicht unterbrochen werden kann?

10

Was ist der einfachste Weg, um den Neustart / das Herunterfahren zu deaktivieren oder vorübergehend auszusetzen, wenn ein wichtiger Prozess ausgeführt wird? Der Vorgang dauert zu lange und kann nicht angehalten / fortgesetzt werden. Daher möchte ich vermeiden, dass der PC während des Betriebs heruntergefahren wird. Es wird von cron ausgeführt. Wenn ich also nicht manuell nach laufenden Prozessen suche, weiß ich nicht, dass es ausgeführt wird. Vielen Dank.

zang3tsu
quelle
5
Mögliches Duplikat: SO: Verhindern Sie vorübergehend das Herunterfahren von Linux . Die Antworten geben Hinweise auf die verschiedenen Ebenen, auf denen dies möglich ist, z. B. Shell-Skripte oder die Energieverwaltung der Desktop-Umgebung.
sr_
Ich denke nicht, dass die Antwort spezifisch genug ist, ohne eine Erklärung der Runlevels oder einen Link zur Erklärung. Es ist nicht in der U & L SE. Darf ich fragen, welche Distribution und Version Sie verwenden?
BSD
Anstatt die Prozedur zum Herunterfahren zu ändern, schreiben Sie einen Wrapper, damit der Job anzeigt, dass er beendet ist, entweder per E-Mail oder durch Berühren einer Datei. Testen Sie den Jobabschluss und führen Sie das Herunterfahren aus. (cron sendet die Ausgabe seiner Jobs per E-Mail an den Eigentümer, aber das kann optimiert werden).
BSD

Antworten:

1

Führen Sie aus, which shutdownum festzustellen, wo sich der Pfad zum Programm zum Herunterfahren befindet. Sie können die Datei umbenennen, obwohl ich dagegen empfehle.

Eine andere (sicherere) Methode. Verwenden Sie einen Alias: So alias shutdown=' ' etwas ist reversibler. Wenn Sie versuchen, das Herunterfahren aller Benutzer zu verhindern, fügen Sie den Alias ​​global hinzu.

Emil
quelle
Ich denke darüber nach, einen Alias ​​zu verwenden, jetzt muss ich nur noch mein Skript schreiben. Vielen Dank!
zang3tsu
Was ist mit anderen Befehlen wie Anhalten oder Ausschalten? Müssen Sie auch Alias ​​erstellen / umbenennen?
Mintyfreshpenguin
17

Für neuere Systeme mit systemd wurde dies durch gelöst systemd-inhibit. Anwendungsbeispiel:

systemd-inhibit --why="Doing weekly backup" bash my-backups.sh

Wenn ein Benutzer versucht, das System herunterzufahren, ist dies nur zulässig, wenn er dazu gezwungen wird.

❯ systemctl poweroff
Operation inhibited by "bash my-backups.sh" (PID 2414 "systemd-inhibit", user ntrrgc),
reason is "Doing weekly backup".
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.
Alicia
quelle
Es gibt jedoch dieses Problem: Wenn Sie es nicht interaktiv als Root ausführen, werden die Sperren ignoriert. github.com/systemd/systemd/issues/2680
Alicia
Ich denke, Sie haben diesen Fehlerbericht falsch verstanden, sie sprechen davon, poweroffals Root nicht interaktiv zu
laufen
Wie habe ich den Fehlerbericht genau falsch gelesen? : S
Alicia
2

Deaktivieren Sie die Befehle "Herunterfahren / Neustart / Ausschalten / Anhalten / Hostname" wie in geschäftskritischen Servern

chmod 0 /sbin/shutdown

dann, wenn Sie es verwenden müssen, chmod es zurück zu chmod 0755.

danny
quelle
1
Was haltist poweroffmit und systemctl poweroff?
Martin Ueding
1

Ich würde den Befehl in der Datei / etc / sudoers deaktivieren, damit nur root ihn ausführen kann.

in / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
vmule   ALL=(ALL:ALL) ALL, !SHUTDOWN

und wenn ich versuche, den Befehl auszuführen:

vmule@debian:~$ sudo /sbin/shutdown  -r now
Sorry, user vmule is not allowed to execute '/sbin/shutdown -r now' as root on debian.vm
vmule
quelle
Können Sie Ihre Antwort ausarbeiten? Das Herunterfahren kann in / etc / sudoers nicht explizit angegeben werden.
Archemar
Klar, ich habe die Antwort mit einer besseren Erklärung bearbeitet. Prost
vmule
0

Ich wollte verhindern, dass ein lokaler Benutzer einen Laptop während eines Upgrades herunterfährt. Das Deaktivieren des Eingabegeräts war der beste Weg. Für mich war es ausreichend, die Maus zu deaktivieren, aber die Tastatur kann auch deaktiviert werden.

Natürlich gibt es einen Nachteil, der Computer kann während dieser Zeit nicht verwendet werden.

Deaktivieren Sie die Eingabe von Tastatur und Maus unter Unix (unter X).

Daniel F.
quelle
-1

shutdownist auch technisch eine Anwendung, die Sie entfernen können. Ausführen which shutdown. whichist ein Befehl, der Ihnen den Pfad einer Anwendung anzeigt. In meinem Fall ist die Ausgabe /sbin/shutdown. Es ist eine Datei, die Sie einfach ausführen können rm shutdown. Wenn Sie das Kopieren vorübergehend deaktivieren möchten, ändern Sie den Namen und entfernen Sie die Originaldatei.

Sie müssen über die erforderlichen Berechtigungen verfügen, wenn Sie dies möchten rm shutdown. Es ist schreibgeschützt, daher kann ein Fehler auftreten. Versuchen Sie es rootnach Bedarf zu entfernen, oder verwenden Sie gegebenenfalls den Befehl rm shutdown.

William Edwards
quelle
3
Warum die -rFlagge? Sie brauchen es nicht für eine Datei, und wenn Sie etwas falsch eingeben, kommt es zu einer Katastrophe.
MadTux