Bien que les réponses précédentes ici satisfassent toutes à la perfection, vous pouvez également mettre votre machine hors tension dès que les tâches sont terminées.
bash
les scripts peuvent être trap
ped, ce qui signifie que certains signaux peuvent être interceptés et certaines tâches peuvent être exécutées en cas de besoin. EXIT
est l'un des signaux qui peuvent être piégés.
Vous pourrez:
- Définissez un
trap
pour EXIT
vos scripts shell automatisés, ce qui signifie la fin de vos tâches automatisées
- Définissez un
trap
pour votre .bashrc
EXIT
, ce qui signifie que lorsque vous vous déconnectez de cette machine, éteignez-le.
L'option n ° 1 serait le cas idéal, à condition que vos tâches ne nécessitent pas d'inspection ad hoc et de jugement manuel.
L'option # 2 couvrirait les cas où vous oublieriez de quitter le terminal sans éteindre. Il y a cependant une mise en garde; si vous avez plusieurs terminaux ouverts sur la même machine et que vous sortez de l'un d'eux, il éteindra tout de même la machine. (Il peut être scripté pour éviter cela, mais je ne compliquerai pas la solution.)
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
Cela peut être à la fin de l' .bashrc
option # 2, quelque part en haut de votre script pour l'option # 1.
Pourquoi ne pas utiliser poweroff
à la fin du script?
Je préfère utiliser set -eo pipefail
en haut de mes scripts. Si une erreur se produit, elle n'échouera pas en silence; il cessera d'exécuter plus de commandes. trap
de EXIT
signal doit couvrir les cas où le script se termine prématurément en raison d'erreurs.
Cependant, pour vos tâches, cela peut également signifier que la machine s'arrêtera avant d'être terminée.
J'ai un bash
modèle simple que j'utilise pour faciliter le débogage des scripts; cela pourrait peut-être être utile. S'il vous plaît voir cet essentiel .
at
(exécution unique).