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.
bashSkripte können trapped sein, was bedeutet, dass bestimmte Signale abgefangen und bestimmte Aufgaben bei Bedarf ausgeführt werden können. EXITist eines der Signale, die abgefangen werden können.
Sie könnten:
- Legen Sie ein
trapfür EXITIhre automatisierten Shell-Skripte fest, was bedeutet, dass Ihre automatisierten Aufgaben beendet werden
- Legen Sie einen Wert
trapfü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 .bashrcOption 2 sein, an einer Stelle am oberen Rand Ihres Skripts für Option 1.
Warum nicht poweroffam Ende des Skripts verwenden?
Ich bevorzuge es, set -eo pipefailoben in meinen Skripten zu verwenden. Wenn ein Fehler auftritt, schlägt dieser nicht unbemerkt fehl. Es werden keine weiteren Befehle mehr ausgeführt. trapof EXITsignal 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 bashVorlage, um das Debuggen von Skripten zu vereinfachen. Vielleicht könnte es von Nutzen sein. Bitte sehen Sie diesen Kern .
at(einmalige Ausführung).