ここでの以前の回答はすべて完璧な要件を満たしていますが、タスクが完了するとすぐにマシンの電源をオフにすることもできます。
bash
スクリプトをtrap
実行できます。つまり、特定の信号を傍受し、必要なときに特定のタスクを実行できます。EXIT
トラップできる信号の1つです。
次のことができるようになります。
- 設定する
trap
ためにEXIT
あなたの自動化されたタスクの終了を意味し、あなたの自動化されたシェルスクリプトの
- にを設定
trap
します.bashrc
EXIT
。つまり、そのマシンからログアウトするたびに電源をオフにします。
タスクがアドホック検査と手動判断を必要としない限り、オプション#1は理想的なケースです。
オプション#2は、電源をオフにせずに端末を終了するのを忘れた場合に対応します。ただし、注意点があります。同じマシンに対して複数の端末を開いており、そのうちの1つを終了しても、マシンの電源はすべて同じままになります。(それを回避するためにスクリプト化できますが、私は解決策を複雑にしません。)
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
、オプション#1のスクリプトの最上部のどこかで、オプション#2の最後に配置できます。
poweroff
スクリプトの最後で使用しないのはなぜですか?
私set -eo pipefail
はスクリプトの一番上で使用することを好みます。エラーが発生した場合、黙って失敗することはありません。それ以上のコマンドの実行を停止します。trap
of EXIT
signalは、エラーが原因でスクリプトが途中で終了する場合をカバーする必要があります。
ただし、タスクの場合、これはマシンが完了する前にシャットダウンすることも意味します。
bash
スクリプトをデバッグしやすくするために使用する単純なテンプレートがあります。多分それはいくつかの役に立つかもしれません。この要点をご覧ください。
at
(一回の実行を)。