Хоча попередні відповіді тут усі задовольняють вимогу до досконалості, ви також можете вимкнути живлення машини, як тільки завдання будуть виконані.
bash
Сценарії можуть бути trap
пед, тобто певні сигнали можуть бути перехоплені і певні завдання можуть виконуватися за потреби.EXIT
є одним із сигналів, який може бути захоплений.
Ви зможете:
- Встановіть
trap
для EXIT
своїх автоматизованих скриптів оболонки, що означає припинення автоматизованих завдань
- Встановіть
trap
свій .bashrc
EXIT
, тобто кожен раз, коли виходите з цієї машини, вимикайте його.
Варіант №1 був би ідеальним випадком, за умови, що для ваших завдань не потрібна перевірка adhoc та ручне судження.
Варіант №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
(разове виконання).