Вопрос или проблема
В 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 позволяет достичь необходимых результатов. При помощи простых скриптов можно автоматизировать этот процесс, повысив эффективность администрирования и мониторинга систем.