Как получить время безотказной работы AIX сервера в секундах

Вопрос или проблема

В Linux я могу получить время непрерывной работы сервера в секундах (значение) с помощью следующей команды

cat /proc/uptime

Но в AIX у нас нет uptime в /proc. Если я просто ввожу uptime, я получаю результаты в днях, часах, минутах, но я хочу получить вывод только в секундах, например 86400 секунд или 30 секунд или любое значение.

С этим выводом я хочу установить оповещение из инструмента мониторинга SCOM, чтобы создавать оповещения, если это значение меньше 1800 секунд.

Из SCOM я могу выполнить shell-команду.

Вы могли бы адаптировать Как получить время работы процесса на разных ОС?, чтобы вернуть прошедшие секунды процесса 1 (init) как довольно точное приближение:

#!/bin/sh
t=$(LC_ALL=POSIX ps -o etime= -p 1)
d=0 h=0
case $t in *-*) d=$((0 + 10#${t%%-*})); t=${t#*-};; esac
case $t in *:*:*) h=${t%%:*}; h=${h/ 0/ }; t=${t#*:};; esac
s=$((10#$d*86400 + 10#$h*3600 + 10#${t%%:*}*60 + 10#${t#*:}))
printf '%d\n' "$s"

Пожалуйста, используйте следующую однострочную команду..

uptime=uptime | awk -F ',' ' {print $1" "$2}'|awk ' {print $3" "$4" "$5}' | sed '1,$s/:/ /' | awk ' {if ($4 =="users") print $1*60 + $2;else if ($4 =="user") print $1*60 + $2;else if ($2=="mins") print $1;else print $1*24*60 + $3*60 + $4}';if [ $uptime -lt 300 ]; then echo “Rebooted before 300 minutes”; else echo “OK”; fi

.

Ответ или решение

Как получить время работы сервера AIX в секундах

Чтобы получить время работы сервера, работающего под управлением AIX, в секундах, необходимо учитывать, что система AIX отличается от Linux. В Linux, как правило, эту информацию можно получить при помощи команды cat /proc/uptime, которая возвращает два числа: общее количество секунд, в течение которых система была запущена, и количество времени, проведенного в состоянии бесполезной нагрузки. Однако в AIX такой директории, как /proc, нет, что делает недоступным прямое использование вышеупомянутой команды. Тем не менее, есть и другие методы для получения этих данных.

Теория

Понимание того, что в AIX отсутствует директория /proc, требует использования альтернативных методов. Одна из таких возможностей — это использование информации, которую возвращает процесс 1 (или init процесс), для приблизительного вычисления времени работы. Эту информацию можно извлечь с помощью команды ps, которая предоставляет сведения о процессах, запущенных в системе.

Интерпретируя данные из команды ps, можно получить информацию о времени работы init-процесса. Используя параметры формата времени, такие как etime, можно провести дополнительные вычисления, чтобы получить точное количество секунд работы системы. Также для извлечения информации о времени работы системы можно воспользоваться командой uptime, однако она изначально выводит результат в формате дней, часов и минут. Эти данные необходимо преобразовать в секунды, чтобы достичь требуемого результата.

Пример

Вот скрипт, который можно использовать для получения времени работы в секундах:

#!/bin/sh
t=$(LC_ALL=POSIX ps -o etime= -p 1)  # Получаем uptime процесса init
d=0 h=0
case $t in *-*) d=$((0 + 10#${t%%-*})); t=${t#*-};; esac  # Извлекаем количество дней
case $t in *:*:*) h=${t%%:*}; h=${h/ 0/ }; t=${t#*:};; esac  # Извлекаем количество часов
s=$((10#$d*86400 + 10#$h*3600 + 10#${t%%:*}*60 + 10#${t#*:}))  # Переводим все в секунды
printf '%d\n' "$s"  # Выводим результат

Этот скрипт извлекает информацию о времени работы процесса init, анализируя его время с момента запуска. Он использует различные логические конструкции и форматирование для извлечения дней, часов и минут, а затем конвертирует их в секунды.

Применение

Полученное значение времени работы системы в секундах можно использовать в различных сценариях. Например, в случае использования системы мониторинга SCOM, можно легко настроить условный оператор, который проверит, превышает ли текущая продолжительность работы определенное значение. Например:

uptime=$(<<ВЫВОД ВАШЕГО СКРИПТА>>)
if [ $uptime -lt 1800 ]; then
    echo "Система была перезагружена в течение последних 30 минут"
else
    echo "Система работает более 30 минут"
fi

Этот подход особенно полезен для систем администрирования и мониторинга, таких как SCOM, так как позволяет автоматически генерировать предупреждения или уведомления, если сервер перезагружался недавно или если время его работы упало ниже определенного порога.

Таким образом, использование комбинации команд ps и awk для получения и форматирования времени работы в AIX позволяет достичь необходимых результатов. При помощи простых скриптов можно автоматизировать этот процесс, повысив эффективность администрирования и мониторинга систем.

Оцените материал
Добавить комментарий

Капча загружается...