シェルスクリプトを使用してクローン操作を監視したいと思います。ただし、最後のコマンドの終了コードを含む変数を使用すると、常に「0」になります。これは、cron操作の後にこのスクリプトを実行していて、「終了コード」が「0」(スクリプト開始)値を持つためだと思います。どのようにスクリプトの起動を無視し、「終了コード」変数を使用できますか?古いクローンの仕事?
$ ls foo;エコ$? ls:fooにアクセスできません:そのファイルまたはディレクトリはありません 2
$ls foo ls:fooにアクセスできません:そのファイルまたはディレクトリはありません $sh test.sh 0
私のtest.sh:
#!/bin/bash 通知(){ 終了コード=$? ${EXIT_CODE}エコー } 通知する
答え1
終了コードをスクリプトにパラメータとして渡すことができます。
ls -l /tmp/filethatdoesnotex.ist
/usr/local/bin/test.sh $?
test.shを使う:
RESULT=$1
if [ $RESULT -gt 0 ]
then
echo "something bad happened and ended with result $RESULT" >&2
else
echo "everything is fine, sleep on"
fi
答え2
コマンドの終了ステータスはシステム全体に保存されません。コマンドを実行するシェルによってローカルに保存されます。シェルが別のコマンドを実行すると、前の終了状態が失われます。
シェルは最後のコマンドの状態で終了します。したがって、シェルスクリプトの最後のコマンドが失敗した場合、シェルの終了ステータスはゼロではありません。
私はcron操作による終了ステータスが他の任意のシェルセッションまたはスクリプトでどのように決定される可能性があるかを知りません。 20個のジョブが並行して実行される場合、どの終了状態がどのジョブに属しているかを知りたいですか?できません。
終了ステータスを一部のステータスファイルに保存するには、cronジョブを変更する必要があります。その後、後で対応するステータスファイルを読み取ることができます。