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.)
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:
wget http://..../somelargefile && halt- haltwird ausgeführt, wenn wgetkeine Fehler zurückgegeben werden
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.
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.
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?
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.
shutdown
warten. Für diesen Zweck muss kshutdown nicht verwendet werden.shutdown
es gibt keine Möglichkeit, auf ein tatsächliches Ereignis zu warten.Jeder Prozess hat ein Verzeichnis, das gemäß seiner Prozess-ID (pid) im
proc
Dateisystem 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):
Vorteile:
sudo
wartende Befehl wird nicht unbedingt als root ausgeführt (Sie müssen die späte Eingabeaufforderung -password nicht umgehen).Nachteile:
quelle
ps
in 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>
pgrep
aka Prozess grep ...Sie können die Operatoren
&&
und verwenden||
, um Befehle miteinander zu verketten. Beispielsweise: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.
quelle
Wenn Sie einen bereits gestarteten Prozess überwachen möchten, können Sie dies in einer Shell tun :
quelle
Es gibt eine Anwendung namens sentinella, die dies mit ihrer GUI für Sie erledigen kann:
für die Installation:
quelle