monitは私の稼働時間スクリプトから偽の番号を表示します


0

実際の稼働時間を取得して表示するためのスクリプトを作成しましたmonit。しかし、終了エラーステータスのみが表示されると思います。私の稼働時間スクリプトは次のとおりです。

#!/bin/sh
uptime=`uptime | awk -F " " '{print $3}'`
echo $uptime
exit $uptime

ターミナルで実行すると、結果はtrueです

For example:

# uptime
 08:39:01 up 421 days, 19:54,  1 user,  load average: 0.06, 0.10, 0.06
# ./up_time.sh
421

スクリプトはうまく機能します。しかし、monitがup_time.confファイルによってこのスクリプトの実行を開始すると、

Program   Status     Last started                Exit value
days_up   Status ok  Thu, 01 Aug 2013 08:41:08      165

ブラウザで見ました。それExit valueがbashの終了エラーコードだと思います。他のスクリプトが正常に機能する理由はわかりませんが、これは彼の仕事をしていません

そういえば、monit up_time.confファイルは次のようになります。

check program days_up with path "/etc/monit/scripts/up_time.sh"
    if status < 1 then alert

ところで、稼働時間は本当に421日ですか?それは、システムに適切にパッチを適用していないことを強く示唆しています。
ゾレダチェ

kspliceのセットアップはインストールされていませんが、必要に応じてセキュリティアップデートを行います。カーネルの更新は非常にまれであるため、再起動はあまり必要ありません。
センサーH.

回答:


1

コマンドの終了値は、符号なしの8ビット整数(別名1バイト)です。これは、終了値が0〜255の間でなければならないことを意味します。スクリプトは、終了コードとして単に無効な終了値412を設定しようとしているようです。余分なビットは無視されるため、返される実際の値は156です。

412 = (0001 1001 1100), 156 = (1001 1100)

以下は、bashを使用$?してデモンストレーションする出力です。`$?変数には、前のコマンドの終了値が格納されます。

root@:~# bash -c 'exit 5' ; echo $?
5
root@:~# bash -c 'exit 253'; echo $?
253
root@:~# bash -c 'exit 255'; echo $?
255
root@:~# bash -c 'exit 256'; echo $?
0
root@:~# bash -c 'exit 257'; echo $?
1
root@:~# bash -c 'exit 412' ; echo $?
156

0

なんでexit $uptime?ただexit 0、シェルスクリプトが正常に終了したことを意味するのではないでしょうか?


彼は数日間の稼働時間をmonitに戻そうとしているため、monitはその情報に基づいてアクションを実行できます。彼の方法は、exitコマンドの制限のために失敗します。
ゾレダチェ

または、スクリプト出力の読み取りの制限を監視します。monitの機能が十分にわかりません。monitはuptime | awk -F " " '{print $3}'コマンドの出力を読み取ることができますか、または終了ステータスのみを読み取ることができますか?
センサーH.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.