monit 从我的正常运行时间脚本中显示错误数字

monit 从我的正常运行时间脚本中显示错误数字

我编写了一个脚本来获取实际正常运行时间并显示在 中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

答案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

答案2

为什么exit $uptime?难道不应该只是exit 0表示你的 shell 脚本确实成功完成了吗?

相关内容