私のトラップがログメッセージを印刷しないのはなぜですか?

私のトラップがログメッセージを印刷しないのはなぜですか?

私がやっていることは、

trap 'rm -f /path/of/file/fileName.running; echo "TRAPPED & READY";' 1 2 9 15 >> trap.log

ログには何も受信されず、削除する必要があるファイルはまだそこにあります。スクリプトが使用しているサーバーをシャットダウンするため、スクリプトの実行中にどのシグナルがスクリプトを停止するのかわかりません。

注:このファイルが存在する場合、私のクローンスケジュールジョブは実行されず、可能なシグナルが欠落しているようには見えません。私はどこで間違っていますか?

答え1

問題の一部はargコマンドの(参照された)外部があるため、>> trap.logファイルから取得することは何も追加しないtrap.logコマンド自体の出力だけです。trapスクリプトが終了したときに「TRAPPED & READY」と言うのがどういう意味なのかよく分からないが、そういう意味のようです。

トラップ'rm -fファイル名;エコ"情報「 >> トラップ。ログ」信号仕様

私はカルロのコメントに同意します。 「スクリプトが使用しているサーバーをシャットダウン」すると、スクリプトが終了する可能性が最も高く(シグナルによって終了せず)EXIT(または同等に0)を使用する必要がありますsigspec (おそらく12および15)。

;PS argコマンドの最後にセミコロン()を追加する必要はありませんtrap

答え2

EXIT信号番号の代わりに使用してください。

以下のスクリプトは私にとって効果的です。私は定数を使います。

> cat test.sh
#!/bin/bash

trap 'echo trap' EXIT

echo 'Program running'
sleep 1

> ./test.sh
Program running
trap

Bashのマンページから:

sigspecがEXIT(0)の場合、シェルを終了するとargコマンドが実行されます。 sigspecがDEBUGの場合、argコマンドはすべての単純コマンド、コマンドの場合、caseコマンド、selectコマンド、コマンドのすべての算術前、および最初のコマンドがシェル関数で実行される前に実行されます(上記のSHELL GRAMMARを参照)。 DEBUGトラップへの影響の詳細については、組み込みのshoptのextdebugオプションの説明を参照してください。 sigspecがRETURNの場合、.shell関数またはスクリプトが実行されるたびにargコマンドが実行されます。または、ソース組み込みプログラムが実行を完了します。

関連情報