
Время работы сервера в Linux, или uptime, отражает период, прошедший с последней перезагрузки системы. Эта информация полезна для оценки стабильности работы, планирования обслуживания и выявления неожиданных сбоев. Точное значение времени работы можно получить за считанные секунды с помощью встроенных команд.
Команда uptime показывает не только длительность работы, но и текущую нагрузку на систему, количество активных пользователей и средние значения нагрузки за 1, 5 и 15 минут. Это помогает быстро определить, перегружен ли сервер и нужно ли вмешательство.
Для анализа конкретных сеансов пользователей можно использовать команду who, а w даст детальную информацию о процессах, запущенных каждым пользователем. Эти данные позволяют понять, какие действия влияют на стабильность сервера.
Файл /proc/uptime хранит информацию о времени работы ядра и простаивающих секундах, что удобно для использования в скриптах мониторинга. Дополнительно systemd позволяет получать uptime для отдельных сервисов, что помогает в управлении критически важными процессами.
Системные логи фиксируют перезагрузки и отключения, предоставляя исторические данные о работе сервера. Использование этих источников вместе с командами командной строки позволяет получить полное представление о состоянии системы и выявить скрытые проблемы.
Проверка времени работы с помощью команды uptime

Команда uptime показывает точное время работы сервера с момента последней перезагрузки, количество активных пользователей и среднюю нагрузку системы. Для выполнения достаточно ввести uptime в терминале.
Для упрощенного отображения времени работы без дополнительной информации используется ключ -p: uptime -p. Результат будет в виде up 7 days, 4 hours, 15 minutes, что удобно для скриптов мониторинга и отчетов.
Значения load average помогают оценить нагрузку: на одноядерной системе значение выше 1 указывает на перегрузку. Регулярная проверка с помощью uptime позволяет отслеживать стабильность работы и вовремя выявлять проблемы с ресурсами.
Использование команды who для анализа сеансов пользователей
Команда who показывает список пользователей, подключённых к серверу, время открытия сеанса и способ подключения. Эти данные помогают определить, кто работает в системе и когда был выполнен вход.
| Поле | Описание |
|---|---|
| user | Имя подключённого пользователя |
| tty | Терминал или виртуальная консоль |
| date/time | Время входа в систему |
| host | IP-адрес или хост удалённого клиента |
Для просмотра только активных сессий используется команда who -u: она добавляет время простоя и PID процесса, связанного с сеансом. По этим данным можно определить, какие сеансы можно завершить вручную при повышенной нагрузке.
Если требуется посмотреть историю входов, пригодится журнал /var/log/wtmp, который читается командой last. Использование who совместно с last даёт точное представление о том, как долго и кем используется сервер.
Команда w и детали о текущих процессах

В первой строке отображаются текущее время, uptime, количество пользователей и значения load average. Это позволяет сразу оценить состояние системы и понять, влияет ли активность пользователей на общую нагрузку.
Каждая запись в таблице включает имя пользователя, терминал, время входа, простой, JCPU и PCPU. Показатель JCPU отражает суммарное время работы процессов, связанных с терминалом, а PCPU – нагрузку процесса, выполняемого пользователем в текущий момент.
Команда w помогает быстро выявить процессы, создающие повышенную нагрузку. Если определённый пользовательский процесс постоянно занимает PCPU выше нормы, стоит проверить его команду и при необходимости ограничить ресурсы или завершить выполнение.
Чтение информации из файла /proc/uptime

Файл /proc/uptime содержит два числовых значения, разделённых пробелом. Первое отражает общее время работы системы в секундах, второе – время простоя процессора. Эти данные считываются напрямую из ядра и подходят для автоматизированного анализа.
Пример содержимого: 128540.32 45210.11. Здесь 128540.32 – количество секунд с момента последней загрузки, а 45210.11 – суммарное время, когда CPU бездействовал. При необходимости значения легко преобразовать в часы и дни с помощью простых арифметических операций.
Если необходимо вычислить uptime в человекочитаемом виде, можно применить встроенные утилиты командной строки, например: awk ‘{print $1/3600\» hours\»}’ /proc/uptime. Такой подход позволяет гибко формировать собственные метрики и использовать их в системах мониторинга.
Использование systemd для получения времени работы сервиса
Для получения данных в структурированном виде используется команда systemctl show имя_сервиса. Поле ActiveEnterTimestamp содержит момент перехода сервиса в рабочее состояние, а ActiveEnterTimestampMonotonic – длительность в микросекундах, что удобно для расчётов.
Если требуется определить, был ли сервис перезапущен автоматически, можно сравнить время его запуска с общим uptime сервера. Несовпадение укажет на перезагрузку службы, после чего стоит просмотреть журнал командой journalctl -u имя_сервиса.
Данные, полученные через systemd, подходят для мониторинга работы критичных компонентов, выявления нестабильных служб и настройки автоматических уведомлений о повторных перезапусках.
Скрипты на Bash для автоматического мониторинга uptime
Пример простого скрипта, сохраняющего время работы в файл журнала:
- Создать файл uptime_log.sh.
- Добавить строки:
#!/bin/bash
echo "$(date) – $(uptime -p)" >> /var/log/uptime.log
- Выдать права на выполнение: chmod +x uptime_log.sh.
- Добавить задачу в cron для регулярного запуска.
Для анализа в секундах можно использовать данные из файла /proc/uptime. Пример кода:
- Считать значение:
uptime_sec=$(cut -d' ' -f1 /proc/uptime). - Преобразовать в часы:
hours=$(echo "$uptime_sec/3600" | bc). - Сравнить с порогом и вывести предупреждение при необходимости.
Для автоматических уведомлений удобно использовать отправку сообщений в Telegram. Скрипт может проверять, не перезагружался ли сервер, сравнивая предыдущее сохранённое значение uptime с текущим. Если текущее значение меньше предыдущего – сервер был перезагружён, а значит нужно отправить оповещение.
Такие скрипты легко интегрируются в систему мониторинга, формируя собственные метрики и журнал работы, который помогает отслеживать стабильность сервера и любые отклонения.
Просмотр времени работы через системные логи

Системные журналы позволяют определить точное время перезагрузки сервера и восстановить историю его работы. Основная информация фиксируется в логах journalctl и файлах каталога /var/log, что помогает сопоставлять отдельные события с актуальным uptime.
В классических системах без systemd информация о загрузках хранится в файле /var/log/boot.log. В нём содержатся время и этапы запуска служб. Сравнение временных меток помогает определить длительность работы сервера после каждой загрузки.
Вопрос-ответ:
Почему команда uptime показывает разное время на двух серверах, хотя оба работают одинаково долго?
Разница связана с тем, что uptime отображает время работы именно текущего ядра. Если один сервер получил автоматическое обновление и перезапустил ядро через kexec, время работы могло измениться без полной перезагрузки системы. Для проверки можно просмотреть логи загрузок командой journalctl —list-boots и сравнить их с показаниями uptime.
Как определить, был ли сервер перезагружён ночью, если мониторинг не зафиксировал событие?
Самый надёжный способ — выполнить last reboot. Команда выводит список всех перезагрузок с точными временными отметками. Если в списке появляется запись с ночным временем, значит сервер действительно перезапускался. Для подтверждения можно сверить данные с логами systemd через journalctl -b -1, где видны события предыдущей загрузки.
Можно ли узнать uptime конкретного сервиса, а не всей системы?
Да, эти данные предоставляет systemd. Выполните systemctl status имя_сервиса и найдите строку Active. Там указано время запуска процесса и длительность его работы. Если нужен формат без лишних строк, используйте systemctl show -p ActiveEnterTimestampMonotonic имя_сервиса, где значение выдаётся в микросекундах.
Как получить uptime в секундах для последующей обработки в скрипте?
Для этого удобно обращаться к файлу /proc/uptime. Первая цифра в выводе — количество секунд работы системы. Её можно прочитать так: cut -d’ ‘ -f1 /proc/uptime. Затем значение легко преобразовать в часы, минуты или использовать при расчётах в сторонних приложениях.
Что делать, если команда w показывает подключённого пользователя, но нет активности?
Проверьте столбец idle. Если там указано длительное время бездействия, возможно, сеанс остался висеть после разрыва связи. В этом случае можно посмотреть соответствующий PID через w -u и при необходимости завершить процесс командой kill. Также полезно проверить логи SSH с помощью journalctl -u sshd, чтобы понять, как возник неактивный сеанс.
