Embora todas as respostas anteriores aqui atendam aos requisitos de perfeição, você também pode desligar a máquina assim que as tarefas forem concluídas.
bash
Os scripts podem ser trap
ped, o que significa que certos sinais podem ser interceptados e determinadas tarefas podem ser executadas quando necessário. EXIT
é um dos sinais que podem ser capturados.
Você seria capaz de:
- Defina a
trap
para EXIT
seus scripts de shell automatizados, significando o encerramento de suas tarefas automatizadas
- Defina um
trap
para o seu .bashrc
EXIT
, ou seja, sempre que você sair dessa máquina, desligue-a.
A opção 1 seria o caso ideal, desde que suas tarefas não exijam inspeção adhoc e julgamento manual.
A opção 2 abrangeria os casos em que você esqueceria de sair do terminal sem desligar. Há uma ressalva; se você tiver vários terminais na mesma máquina abertos e sair de um deles, ele ainda desligará a máquina da mesma forma. (Ele pode ser script para evitar isso, mas não vou complicar a solução.)
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
Isso pode estar no final da .bashrc
opção 2, em algum lugar na parte superior do seu script para a opção 1.
Por que não usar poweroff
no final do script?
Eu prefiro usar set -eo pipefail
no topo dos meus scripts. Se ocorrer algum erro, ele não falhará silenciosamente; parará de executar mais comandos. trap
O EXIT
sinal deve cobrir os casos em que o script termina prematuramente devido a erros.
No entanto, para suas tarefas, isso também pode significar que a máquina será desligada antes de serem concluídas.
Eu tenho um bash
modelo simples que eu uso para facilitar a depuração de scripts; talvez possa ser de alguma utilidade. Por favor, veja esta essência .
at
(execução única).