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

我已经写了一个脚本获取真正的正常运行时间,并在monit显示。 但我认为它只显示退出错误状态。 我的正常运行时间脚本是:

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

当我在terminal运行它的结果是真实的

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退出错误代码。 我不能得到为什么其他脚本工作正常,但这个不工作

说起来, 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的$? 展示。 `$? variables是存储前一个命令的退出值。

 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 

为什么要exit $uptime ? 不应该只是exit 0 ,这意味着你的shell脚本完成了吗?