コマンドのリターンコードを判定するワンライナー

リターンコード

Linuxのシェルからコマンドを実行すると結果とは別に、リターンコードといってコマンドが成功したのか失敗したのか変数で返す動作があります。

date ; echo $?
Wed Oct 18 21:48:39 JST 2023
0.

$?で表示される0がリターンコードです。(実際は0の後のドットは出力されません)

dates ; echo $?
-bash: dates: command not found
127

存在しないコマンドを実行すると0ではなく127が返ってきます。
コマンドが成功した場合は0です。
リターンコードが0かそうでないかでコマンド成功かどうか判断する事が出来ます。

リターンコードだけ出力する

date > /dev/null 2>&1 ; echo $?
0.
dates > /dev/null 2>&1 ; echo $?
127

/dev/null 2>&1にリダイレクトして標準出力もエラーも捨てます。
リターンコードのみ取得します。

コマンド成功の場合は1,失敗の場合は0を出力する

date > /dev/null 2>&1 ; if [ $? = 0 ]; then echo 1; else echo 0; fi
1
dates > /dev/null 2>&1 ; if [ $? = 0 ]; then echo 1; else echo 0; fi
0.

ZABBIXで取得する

dateコマンドが失敗する事はないと思いますが、何かオープンソースソフトウェアがコマンド実行でエラーを返す(本来ZABBIXから取得している値を返さない)場合があります。

この場合トリガーなどが設定されていても、トリガーにならず異常に気が付きません。
リターンコードを監視する事で、サービスは起動していてもコマンドが失敗する様な状況を検知する事が出来ます。

TwitterFacebookLinkedInHatenaPocketCopy Link