Linux

monit 顯示我的正常執行時間腳本中的錯誤數字

  • August 2, 2013

我寫了一個腳本來獲取真正的正常執行時間並顯示在monit. 但我認為它只顯示退出錯誤狀態。我的正常執行時間腳本是:

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

當我在終端中執行它時結果為真

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

命令的退出值是一個無符號的 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

引用自:https://serverfault.com/questions/527970