Chociaż wszystkie poprzednie odpowiedzi tutaj spełniają wymóg doskonałości, możesz również wyłączyć maszynę, gdy tylko zadania zostaną wykonane.
bash
skrypty mogą być trap
ped, co oznacza, że niektóre sygnały mogą być przechwytywane, a niektóre zadania mogą być wykonywane w razie potrzeby. EXIT
jest jednym z sygnałów, które mogą zostać uwięzione.
Byłbyś w stanie:
- Ustaw a
trap
dla EXIT
swoich automatycznych skryptów powłoki, co oznacza zakończenie automatycznych zadań
- Ustaw
trap
dla swojego .bashrc
EXIT
, co oznacza, że za każdym razem, gdy wylogujesz się z tego urządzenia, wyłącz je.
Opcja nr 1 byłaby idealnym rozwiązaniem, pod warunkiem, że twoje zadania nie wymagają kontroli adhoc i ręcznej oceny.
Opcja nr 2 obejmowałaby przypadki, w których zapomniałbyś wyjść z terminala bez wyłączania zasilania. Jest jednak zastrzeżenie; jeśli masz wiele otwartych terminali na tym samym komputerze i wyjdziesz z jednego z nich, nadal będzie ono wyłączać urządzenie. (Można tego użyć w skryptach, aby tego uniknąć, ale nie skomplikuję rozwiązania).
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
Może to być na końcu .bashrc
opcji nr 2, gdzieś na górze skryptu dla opcji nr 1.
Dlaczego nie użyć poweroff
na końcu skryptu?
Wolę używać set -eo pipefail
na górze moich skryptów. Jeśli wystąpi jakikolwiek błąd, nie po cichu zawiedzie; przestanie wykonywać więcej poleceń. trap
z EXIT
sygnałem powinno obejmować przypadki, gdy skrypt kończy się przedwcześnie z powodu błędów.
Jednak w przypadku zadań może to również oznaczać, że urządzenie zostanie zamknięte przed ich zakończeniem.
Mam prosty bash
szablon, którego używam, aby ułatwić debugowanie skryptów; może to może się przydać. Zobacz tę treść .
at
(wykonanie jednorazowe).