Linux: получение даты и времени запуска системы
Я знаю, что uptime печатает время, когда машина была запущена и работает, но есть ли более простой (надежный) способ получения даты запуска, чем обратный отсчет с этого вывода? Я попытался просмотреть /proc , но не нашел ничего актуального. На моем dmesg есть также строка, подобная этой: [ 0.673492] rtc_cmos rtc_cmos: setting system clock to 2011-03-14 14:26:52 UTC (1300112812) , но мне интересно, является ли этот метод независимым от распространения и версии ядра.
11 ответов 11
Я нашел несколько команд здесь. Попробуйте who -b или last reboot | head -1 .
who дает числовые даты, а last reboot возвращает сокращенные названия дня / месяца.
date -d "`cut -f1 -d. /proc/uptime` seconds ago"
Будьте осторожны с другими вариантами. last команда перестанет работать, как только wtmp будет повернут. Команда who зависит от доступности и целостности utmp . И /proc/1 может иметь текущую дату вместо даты времени загрузки и даже может быть недоступна в защищенной системе. Редактировать: dmesg имеет только задний буфер фиксированной длины, так что это тоже нереально. Журналы ядра могут быть в /var/log но большинство дистрибутивов хранят их только 8 недель.
Я наткнулся на этот вопрос, когда искал способ получить согласованное, разбираемое время загрузки, а не время после загрузки, которое меняется при каждом вызове. Похоже, что uptime -s подойдет для большинства систем Linux.
cat /proc/stat | grep btime | awk '< print $2 >'
и после быстрого поиска я обнаружил эту страницу: /proc/stat объяснена, которая обрисовывает в общих чертах «Различные части информации о деятельности ядра, которые доступны в файле /proc/stat ».
- хорошо: uptime -s , who -b или парсинг /proc/uptime
- плохо: ls -ld /proc/1 и варианты.
Не используйте ls -ld /proc /1 для этой цели. Иногда обновляется после s2disk или s2ram.
В моем случае who -b сказал:
загрузка системы 2 мая 09:51
dr-xr-xr-x 7 root root 0 мая 3 13:09 /proc /1
ls -ld для /proc или /sys похоже, сохраняется после возобновления, но это зависит от реализации и может измениться в будущем, поэтому не используйте такие методы. И если ваши системные часы имеют местное время, а не UTC, они имеют отрицательное смещение.
(У меня пока нет права комментировать ответы, поэтому открыл новый ответ. Сожалею.)
РЕДАКТИРОВАТЬ: uptime -s впервые ответил в этом ответе mikegreiling
Самый простой способ — посмотреть, когда был запущен /sbin /init (это всегда первый процесс, запускаемый после загрузки ядра):
# ls -ld /proc/1 dr-xr-xr-x 7 root root 0 2011-03-27 23:54 /proc/1
Итак, я вижу, что моя машина загрузилась в 6 минут до полуночи 27 марта 2011 года.
Если вы хотите использовать его в сценариях, вы можете использовать вместо этого команду stat :
# stat --printf='%Y' /proc/1 1301266491
%Y указывает время с момента последнего изменения каталога (время создания процесса) в секундах с начала эпохи (1/1/70) и является стандартной меткой времени Unix.
кажется, дает мне то, что мне нужно. Пост выше странный. /proc/uptime не содержит значения даты — оно должно быть вычтено из текущего времени. Может быть, он имел в виду:
date -d @$(( $(date +%s) - $(cut -f1 -d. /proc/uptime) ))
Под Bash, без труб и прочих процессов; просто текст:
(Просто повторно использовали переменную по умолчанию REPLY , но вы можете выбрать все, что вам нужно)
date -d @$(sed -n '/^btime /s///p' /proc/stat)
(еще один способ сделать это, который полезен в определенных обстоятельствах)
(echo ' Currently:' | tr "\n" ' ' ; date +"%Y-%m-%d %k:%M:%S" ; echo ' Up Since:' | tr '\n' ' ' ; uptime -s ; echo ' Duration:' | tr '\n' ' ' ; uptime -p)
Currently: 2016-05-09 9:06:29 Up Since: 2016-05-04 12:56:04 Duration: up 4 days, 20 hours, 10 minutes
# tuptime -t No. Startup Date Uptime Shutdown Date End Downtime 1 09:43:39 AM 08/08/2017 41 days, 0 hours, 51 minutes and 2 seconds 10:34:41 AM 09/18/2017 OK 10 seconds 2 10:34:51 AM 09/18/2017 1 minute and 16 seconds 10:36:07 AM 09/18/2017 OK 1 second 3 10:36:08 AM 09/18/2017 13 minutes and 20 seconds 10:49:28 AM 09/18/2017 OK 3 seconds 4 10:49:31 AM 09/18/2017 45 days, 0 hours, 1 minute and 20 seconds 09:50:51 AM 11/02/2017 OK 4 seconds 5 09:50:55 AM 11/02/2017 27 minutes and 25 seconds 10:18:20 AM 11/02/2017 OK 4 seconds 6 10:18:24 AM 11/02/2017 9 seconds 10:18:33 AM 11/02/2017 OK 9 seconds 7 10:18:42 AM 11/02/2017 4 days, 5 hours, 41 minutes and 47 seconds 04:00:29 PM 11/06/2017 OK 44 seconds 8 04:01:13 PM 11/06/2017 15 days, 17 hours, 33 minutes and 48 seconds 09:35:01 AM 11/22/2017 BAD 10 minutes and 40 seconds 9 09:45:41 AM 11/22/2017 8 hours, 9 minutes and 20 seconds 05:55:01 PM 11/22/2017 BAD 7 minutes and 8 seconds 10 06:02:09 PM 11/22/2017 1 hour, 7 minutes and 54 seconds 07:10:03 PM 11/22/2017 BAD 11 minutes and 30 seconds 11 07:21:33 PM 11/22/2017 1 hour, 58 minutes and 32 seconds 09:20:05 PM 11/22/2017 OK 5 seconds 12 09:20:10 PM 11/22/2017 14 minutes and 52 seconds 09:35:02 PM 11/22/2017 BAD 5 minutes and 52 seconds 13 09:40:54 PM 11/22/2017 4 minutes and 6 seconds 09:45:00 PM 11/22/2017 BAD 4 minutes and 51 seconds 14 09:49:51 PM 11/22/2017 11 hours, 15 minutes and 10 seconds 09:05:01 AM 11/23/2017 BAD 7 minutes and 20 seconds 15 09:12:21 AM 11/23/2017 3 days, 2 hours, 17 minutes and 40 seconds 11:30:01 AM 11/26/2017 BAD 27 minutes and 44 seconds 16 11:57:45 AM 11/26/2017 109 days, 19 hours, 12 minutes and 37 seconds 07:10:22 AM 03/16/2018 OK 17 seconds 17 07:10:39 AM 03/16/2018 25 days, 3 hours, 55 minutes and 59 seconds 12:06:38 PM 04/10/2018 OK 3 seconds 18 12:06:41 PM 04/10/2018 8 days, 19 hours, 3 minutes and 20 seconds 07:10:01 AM 04/19/2018 BAD 3 minutes and 52 seconds 19 07:13:53 AM 04/19/2018 77 days, 9 hours, 44 minutes and 39 seconds
Как проверить время работы вашего Linux-сервера
Перестаньте задаваться вопросом, как долго работает ваша система. Просто проверьте время безотказной работы с помощью команды uptime.
Это покажет вам одну строку вывода, которая показывает текущее время, время безотказной работы (в днях и часах), количество пользователей, которые в настоящее время вошли в систему, и среднюю нагрузку.
Вот пример вывода команды uptime:
andreyex@Homes:~$ uptime 16:13:00 up 2 days, 8:18, 1 user, load average: 1.19, 1.54, 1.51
Вероятно, вы можете определить время безотказной работы, но позвольте мне объяснить все элементы этого вывода.
- 16:13:00 : Текущее время в системе.
- up 2 days, 8:18 : Это означает, что система Linux работала последние 2 дня, 8 часов и 18 минут.
- 1 user: это количество пользователей, которые в настоящее время вошли в систему Linux.
- load average: 1.19, 1.54, 1.51: это средняя загрузка ЦП за последние 1, 5 и 15 минут. 1,54 означает, что 154% потребления ЦП (если это 4-ядерный ЦП, это означает, что использовалось 1,54 из 4 ядер).
Команда uptime получает информацию, связанную с загрузкой, файлов из /proc, как и большинство других команд. Он использует файл /var/run/utmp для получения информации о вошедших в систему пользователях.
Дело не в том, что у времени безотказной работы вообще нет вариантов. Их немного, но в некоторых случаях они могут быть полезны.
Использование команды uptime с параметрами
Если вы считаете, что вывод команды uptime слишком загроможден, вы можете использовать опцию pretty print -p:
Она покажет только информацию о времени безотказной работы, это тоже на словах, что более понятно.
andreyex@Homes:~$ uptime -p up 2 days, 8 hours, 47 minutes
Если вы хотите узнать, с каких пор запущен сервер Linux, вы можете использовать опцию -s:
Это даст точную отметку времени, когда ваша система загружалась в последний раз:
andreyex@Homes:~$ uptime -s 2022-02-22 13:42:43
Существует также опция -V, которая показывает версию команды и -hдля отображения страницы справки.
Вывод по умолчанию команды uptime показывает ту же информацию, которую вы получаете в первой строке команды w.
Бонусный совет: ведите учет времени безотказной работы
Команда uptime показывает только то, как долго работает ваша система.
Существует удобная утилита под названием uprecords, которая обеспечивает запись вашего времени безотказной работы.
Без шуток! Она показывает лучшее (самое продолжительное) время безотказной работы вашей системы Linux в табличном формате с дополнительной информацией о времени загрузки, продолжительности и версии ядра Linux .
Команда uprecords не установлена по умолчанию. Она доступна в пакете uptimed и вы должны установить его в своей системе.
В Debian/Ubuntu вы можете использовать:
По сути, это демон, который отслеживает максимальное время безотказной работы системы с помощью идентификаторов загрузки, используя время загрузки системы для отделения сеансов друг от друга.
После установки uptimed вы можете использовать команду uprecords, чтобы отобразить записи о времени безотказной работы:
Имейте в виду, что вы не сможете сразу получить исторические записи о времени безотказной работы. Он начинает запись с момента установки демона времени безотказной работы.
Итак, когда вы в последний раз перезагружали свой сервер Linux .
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.