В Linux, когда начинается отсчет «времени безотказной работы»?

это соответствует неудачной попытке аутентификации?

# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
   map to guest = bad user

пожалуйста, опубликуйте лог-файл, показывающий, что аутентификация прошла успешно или нет

53
13.04.2016, 00:22
3 ответа

В моей системе он получает время работы из /proc/uptime:

$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY)         = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY)          = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY)         = 4
 10:52:38 up 3 days, 23:38,  4 users,  load average: 0.00, 0.02, 0.05

Из proc manpage:

 /proc/uptime.
 Этот файл содержит два числа: время работы системы
 (секунды), и количество времени, проведенного в бездействующем процессе
 (секунды).

Файловая система proc содержит набор псевдофайлов. Это не настоящие файлы, они просто выглядят как файлы, но содержат значения, которые предоставляются непосредственно ядром. Каждый раз, когда вы читаете файл, например /proc/uptime, его содержимое регенерируется на лету. Файловая система proc - это интерфейс к ядру.


В исходном коде ядра linux файл fs/proc/uptime. c в строке 49, вы видите вызов функции:

proc_create("uptime", 0, NULL, &uptime_proc_fops);

Это создает запись файловой системы proc под названием uptime (procfs обычно монтируется под /proc), и связывает с ней функцию, которая определяет допустимые файловые операции над этим псевдофайлом и связанные с ними функции. В случае с uptime это просто операции read() и open(). Однако, если проследить функции назад, вы окажетесь здесь, где вычисляется время работы.


Внутри системы есть таймер-интерьюпт, который периодически обновляет время работы системы (помимо других значений). Интервал, через который тикает таймер-интервал, определяется препроцессором-макросом HZ, точное значение которого определяется в файле конфигурации ядра config и применяется во время компиляции.

Время простоя и количество циклов процессора в сочетании с частотой HZ (циклов в секунду) могут быть вычислены в количестве (секунд) с момента последней загрузки.


Чтобы ответить на ваш вопрос: С какого момента начинается отсчет "uptime"?

Поскольку uptime - это внутреннее значение ядра, которое увеличивается каждый цикл, оно начинает отсчет с момента инициализации ядра. То есть, когда закончился первый цикл. Еще до того, как что-либо смонтировано, непосредственно после того, как загрузчик передает управление образу ядра.

85
27.01.2020, 19:33

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

  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }
11
27.01.2020, 19:33

В стандартной системе UNIX (основанной на исходных текстах *), uptime читает /var/adm/utmpx и проверяет последнее время перезагрузки.

Другими словами: это получение даты, которую вы также получаете с помощью who -b, а затем вычисляет время с тех пор.

*) uptime является ссылкой на программу w и была введена BSD примерно в 1980 году.

7
27.01.2020, 19:33

Теги

Похожие вопросы