У меня есть скрипт, который опирается на время запуска Ubuntu 18.04:

uptime -s

Я сохраняю это значение в файле при запуске сценария. Я заметил, когда я начал Ubuntu, это время было:

uptime -s
2019-01-07 18:01:59

После выполнения более двух часов одна и та же команда сообщает о другом времени (все это время я оставался в той же учетной записи):

uptime -s
2019-01-07 18:01:58

Я ожидал бы, что команда сообщит то же самое время в течение того же самого сеанса входа. Но время как-то меняется с 1 секундой (сейчас раньше).

Это проблема ОС или инструмента?

https://elixir.bootlin.com/linux/latest/source/fs/proc/uptime.c
struct timespec64 uptime;
ktime_get_boottime_ts64(&uptime);

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

Обновить:

Хотя я нашел ответ в: Linux: Получение даты и времени запуска системы

Но я ошибся, просто повезло, после еще нескольких тестов видно, что это проблема ОС, время меняется между 58 и 59 в зависимости от наносекунд:

$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.670091767
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.627339874
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.708332394
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.821526069
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.604129974
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.469767199
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:59.264900963
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.986611962
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.851955874
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.958194732
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:59.066728481

Мне кажется, нет надежной системы безотказной работы до второго уровня.

1 ответ1

0

Нашел ответ здесь:

Linux: получение даты и времени запуска системы

Эта команда, кажется, дает правильный результат, в отличие от uptime -s

 date -d "`cut -f1 -d. /proc/uptime` seconds ago"

Пример:

date -d "`cut -f1 -d. /proc/uptime` seconds ago"
Mo 7. Jan 18:01:59 CET 2019

Кажется, uptime -s не надежно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .