Назад | Перейти на главную страницу

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

Выходное значение команды - это 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

Зачем exit $uptime? Разве это не должно быть просто exit 0, что означает, что ваш сценарий оболочки завершился нормально?