Die vorherigen Antworten hier erfüllen zwar alle die Anforderung nach Perfektion, Sie können die Maschine jedoch auch ausschalten, sobald die Aufgaben erledigt sind.
bash
Skripte können trap
ped sein, was bedeutet, dass bestimmte Signale abgefangen und bestimmte Aufgaben bei Bedarf ausgeführt werden können. EXIT
ist eines der Signale, die abgefangen werden können.
Sie könnten:
- Legen Sie ein
trap
für EXIT
Ihre automatisierten Shell-Skripte fest, was bedeutet, dass Ihre automatisierten Aufgaben beendet werden
- Legen Sie einen Wert
trap
für fest .bashrc
EXIT
, dh schalten Sie den Computer aus, wenn Sie sich von diesem Computer abmelden.
Option 1 wäre der ideale Fall, vorausgesetzt, Ihre Aufgaben erfordern keine Ad-hoc-Prüfung und manuelle Beurteilung.
Option 2 würde die Fälle abdecken, in denen Sie vergessen würden, das Terminal zu verlassen, ohne es auszuschalten. Es gibt jedoch eine Einschränkung; Wenn mehrere Terminals für dasselbe Gerät geöffnet sind und Sie eines verlassen, wird das Gerät trotzdem ausgeschaltet. (Es kann ein Skript erstellt werden, um dies zu vermeiden, aber ich werde die Lösung nicht komplizieren.)
cleanup(){
# Do some tasks before terminating
echo oh la la, cleaning is so nice
echo "See you later, world"
sudo poweroff & # finally shutdown
}
trap cleanup EXIT
Dies kann am Ende von .bashrc
Option 2 sein, an einer Stelle am oberen Rand Ihres Skripts für Option 1.
Warum nicht poweroff
am Ende des Skripts verwenden?
Ich bevorzuge es, set -eo pipefail
oben in meinen Skripten zu verwenden. Wenn ein Fehler auftritt, schlägt dieser nicht unbemerkt fehl. Es werden keine weiteren Befehle mehr ausgeführt. trap
of EXIT
signal sollte die Fälle abdecken, in denen das Skript aufgrund von Fehlern vorzeitig beendet wird.
Für Ihre Aufgaben kann dies jedoch auch bedeuten, dass die Maschine heruntergefahren wird, bevor sie abgeschlossen sind.
Ich verwende eine einfache bash
Vorlage, um das Debuggen von Skripten zu vereinfachen. Vielleicht könnte es von Nutzen sein. Bitte sehen Sie diesen Kern .
at
(einmalige Ausführung).