ここでの以前の回答はすべて完璧な要件を満たしていますが、タスクが完了するとすぐにマシンの電源をオフにすることもできます。
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はスクリプトの一番上で使用することを好みます。エラーが発生した場合、黙って失敗することはありません。それ以上のコマンドの実行を停止します。trapof EXITsignalは、エラーが原因でスクリプトが途中で終了する場合をカバーする必要があります。
ただし、タスクの場合、これはマシンが完了する前にシャットダウンすることも意味します。
bashスクリプトをデバッグしやすくするために使用する単純なテンプレートがあります。多分それはいくつかの役に立つかもしれません。この要点をご覧ください。
at(一回の実行を)。