Как программно установить аппаратные часы в Linux?

StackOverflow https://stackoverflow.com/questions/202116

Вопрос

Linux предоставляет вызов stime(2) для установки системного времени.Однако, хотя это приведет к обновлению системного времени, оно не приведет к тому, что аппаратные часы BIOS будут соответствовать новому системному времени.

Системы Linux обычно синхронизируют аппаратные часы с системным временем при завершении работы и через определенные промежутки времени.Однако если перед одной из этих автоматических синхронизаций компьютер выключится и снова выключится, время при перезапуске компьютера будет неверным.

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

Это было полезно?

Решение

Дополнительную информацию можно найти на странице руководства rtc, но если вы вошли в систему как root, то что-то вроде этого:

    struct       rtc_time {
        int         tm_sec;      
        int         tm_min;      
        int         tm_hour;     
        int         tm_mday;     
        int         tm_mon;      
        int         tm_year;     
        int         tm_wday; /* unused */
        int         tm_yday; /* unused */
        int         tm_isdst;/* unused */
    };

struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);

Другие советы

После вызова stime() сделайте следующее:

system("/sbin/hwclock --systohc");

Дополнительную информацию смотрите на странице руководства hwclock(8).

Я бы начал с чтения исходного кода hwclock.

Я также хотел бы отметить, что аппаратные часы точны только до определенной точки (я видел системы, которые теряют/прибавляют пару секунд в день).

Рассматривали ли вы возможность настройки сетевого демона времени для синхронизации ваших часов с сервером времени?

По общему признанию, эта синхронизация не происходит до тех пор, пока демон не запустится, поэтому синхронизация ваших аппаратных часов также помогает между включением питания и моментом синхронизации демона времени с сервером времени.

Если текстовый редактор отличается от kubuntu (по умолчанию в редакторе используется kate), используйте свой собственный с sudo команда в терминале.

  1. запустить терминал
  2. скопируйте и вставьте эту командуsudo kate /etc/default/rcS нажимать Входить
  3. введите пароль пользователя (ваш пароль для входа) нажмите Входить
  4. текстовый редактор откроется на рабочем столе
  5. изменить строку UTC=yes к UTC=no
  6. и нажмите «Сохранить» (вверху панели вкладок текстового редактора)
  7. перезагрузить
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top