Wie kann ich den Computer nach Abschluss einer Aufgabe herunterfahren?

25

Normalerweise starte ich einen Download, bevor ich zur Schule gehe.
Welchen Befehl soll ich verwenden, um die erforderlichen Speichervorgänge automatisch durchzuführen und den Computer auszuschalten, nachdem eine bestimmte Aufgabe abgeschlossen wurde?
(Sagen wir, nach der Installation der Updates oder nach dem Herunterladen einer großen Datei.)

Ich habe auch bei askubuntu gekreuzt .

El Burro
quelle

Antworten:

25

Es hängt davon ab, welche Aufgabe Sie gestartet haben. Wenn es sich um ein Befehlszeilenprogramm handelt, können Sie es einfach ausführen haltoder shutdown -h now:

  1. wget http://..../somelargefile; halt- haltwird ausgeführt nachwget

  2. wget http://..../somelargefile && halt- haltwird ausgeführt, wenn wgetkeine Fehler zurückgegeben werden

  3. wget http://..../somelargefile || halt- haltwird bei wgetRückgabefehlern ausgeführt

Alternativ dazu kshutdownkönnen Sie in dieser App festlegen, welche Aktion ausgeführt werden soll (Neustart / Herunterfahren / Ruhezustand / usw. oder Befehlsausführung) und wann (nach einiger Zeit oder wenn eine andere Anwendung beendet wird). Wenn Sie dieses Tool verwenden möchten, müssen Sie den richtigen Prozess auswählen. Einige Update-Dienstprogramme starten nur wenige Unterprozesse.

KShutdown

pbm
quelle
4
Sie können auch etwas shutdownwarten. Für diesen Zweck muss kshutdown nicht verwendet werden.
Cascabel
1
Nein, aber shutdownes gibt keine Möglichkeit, auf ein tatsächliches Ereignis zu warten.
Shadur
18

Jeder Prozess hat ein Verzeichnis, das gemäß seiner Prozess-ID (pid) im procDateisystem benannt ist. Sie können daher auf die Beendigung eines bestimmten Prozesses warten, indem Sie prüfen, ob sein Verzeichnis wiederholt vorhanden ist.

Sie können dies verwenden, um das System nach Beendigung des Prozesses wie folgt herunterzufahren (ersetzen Sie 2296 durch die PID, auf die Sie warten müssen):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

Vorteile:

  • Sie können entscheiden, ob Sie den Shell-Befehl beenden möchten oder nicht
  • Das Herunterfahren wird als root ausgeführt. Der zu sudowartende Befehl wird nicht unbedingt als root ausgeführt (Sie müssen die späte Eingabeaufforderung -password nicht umgehen).

Nachteile:

  • Es kann vorkommen, dass Ihr Prozess beendet wird und das Betriebssystem innerhalb dieser Sekunde dieselbe PID für einen neu erstellten Prozess wiederverwendet (Race Condition). Sie würden also weiterhin darauf warten, dass der neue Prozess beendet wird.
moooeeeep
quelle
2
Hauptpunkt: Dies funktioniert auch, wenn der Prozess gestartet wurde.
Heisenberg
Wenn Sie etwas von einem Terminal gestartet haben, das Sie noch psin demselben Terminal geöffnet haben , sollten Sie die PID für die CMD erkennen. Wenn sich der Prozess in einem anderen Terminal befand / befindet, sollte es hilfreich sein, die ps-Ausgabe für alles durch grep zu pippen, um nach Ihrem Befehl zu filternps -elf | grep <command_related_word>
TafT
Besser überprüfen Sie meine Antwort auf pgrepaka Prozess grep ...
Gilles Quenot
Wie kann ich diesen Befehl in den Hintergrund stellen?
DerWeh
1
@DerWeh Packe es in ein Shell-Skript und folge den hier angegebenen Schritten: stackoverflow.com/q/625409/1025391
moooeeeep
3

Sie können die Operatoren &&und verwenden ||, um Befehle miteinander zu verketten. Beispielsweise:

apt-get update && sleep 2 && init 0

Dadurch wird ein Update des Systems mit aptitude durchgeführt. Warten Sie 2 Sekunden und wechseln Sie auf Runlevel 0. Abhängig von Ihrem System wird die Hardware möglicherweise ausgeschaltet oder nicht.

Um mit einer oder mehreren Operationen zu sprechen, die auf eine willkürlichere Operation folgen, wie z. B. einem vermutlich Webbrowser, benötigen Sie zusätzliche Logik, um die Download-Datei zu überwachen und zu überprüfen, ob der Download tatsächlich abgeschlossen wurde. Die Shell-Logik bleibt jedoch unverändert.

Tok
quelle
3

Wenn Sie einen bereits gestarteten Prozess überwachen möchten, können Sie dies in einer tun :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now
Gilles Quenot
quelle
1

Es gibt eine Anwendung namens sentinella, die dies mit ihrer GUI für Sie erledigen kann: Sentinella

für die Installation:

sudo aptitude update
sudo aptitude install sentinella
shgnInc
quelle