Хотя все предыдущие ответы здесь отвечают требованиям к совершенству, вы также можете выключить машину, как только задачи будут выполнены.
bash
сценарии могут быть trap
воспроизведены, что означает, что определенные сигналы могут быть перехвачены и определенные задачи могут быть выполнены при необходимости. EXIT
является одним из сигналов, которые могут быть пойманы в ловушку.
Вы сможете:
- Установите
trap
для EXIT
ваших сценариев автоматической оболочки, что означает прекращение ваших автоматизированных задач
- Установите
trap
для себя .bashrc
EXIT
, то есть, когда вы выходите из этой машины, выключите его.
Вариант № 1 был бы идеальным случаем, если ваши задачи не требуют специального осмотра и ручной оценки.
Вариант № 2 будет охватывать случаи, когда вы забудете выйти из терминала без отключения питания. Есть предостережение, хотя; если у вас открыто несколько терминалов на одной машине, и вы выходите из одной из них, она все равно выключит машину. (Это может быть написано в сценарии, чтобы избежать этого, но я не буду усложнять решение.)
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
Это может быть в конце .bashrc
варианта № 2, в верхней части вашего сценария для варианта № 1.
Почему бы не использовать poweroff
в конце сценария?
Я предпочитаю использовать set -eo pipefail
в верхней части моих сценариев. Если произойдет какая-либо ошибка, она не потерпит молчания; это остановит выполнение большего количества команд. trap
от EXIT
сигнала должен охватывать случаи , когда скрипт завершается преждевременно из - за ошибки.
Однако для ваших задач это также может означать, что машина выключится, прежде чем они будут завершены.
У меня есть простой bash
шаблон, который я использую для облегчения отладки скриптов; может быть, это может быть полезным. Пожалуйста, посмотрите эту суть .
at
(разовое исполнение).