Como você programaticamente definir o relógio de hardware no Linux?

O Linux fornece a chamada stime (2) para definir a hora do sistema. No entanto, embora isso atualize o horário do sistema, ele não define o relógio de hardware do BIOS para corresponder à nova hora do sistema.

Os sistemas Linux normalmente sincronizam o relógio do hardware com a hora do sistema no desligamento e em intervalos periódicos. No entanto, se a máquina for desligada antes de uma dessas sincronizações automáticas, a hora ficará incorreta quando a máquina for reiniciada.

Como você garante que o relógio do hardware seja atualizado quando você definir a hora do sistema?

11
Por que a linguagem de programação é importante? Você tem respostas diferentes para diferentes idiomas /
adicionado o autor Kristopher Johnson, fonte
Especifique uma linguagem de programação.
adicionado o autor Lightness Races in Orbit, fonte
Er ................. sim.
adicionado o autor Lightness Races in Orbit, fonte

5 Respostas

Confira a man-page do rtc para detalhes, mas se você estiver logado como root, algo assim:

    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);
14
adicionado
Raiz não necessária, somente capacidade CAP_SYS_TIME de acordo com rtc (4).
adicionado o autor Erik Westrup, fonte

Depois de chamar stime (), faça o seguinte:

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

Veja a página do manual hwclock (8) para mais informações.

9
adicionado
Note que se o seu rtc está configurado para usar o tempo UTC você precisa adicionar - utc ou - localtime caso contrário.
adicionado o autor Julien Hirel, fonte

Eu também gostaria de salientar que o clock do hardware é apenas preciso até certo ponto (eu vi sistemas que perderão/ganharão alguns segundos por dia).

Você já pensou em configurar o daemon de tempo de rede para sincronizar seu relógio com um servidor de horário?

É verdade que essa sincronização não acontece até que o daemon seja iniciado, portanto, manter o relógio do hardware sincronizado também ajuda entre a ativação e o ponto em que o daemon de tempo sincroniza com o servidor de horário.

2
adicionado
A maioria dessas variações, pela minha experiência, é devida a baixa voltagem na bateria da placa motora. Eu sugeriria verificá-lo antes de configurar um serviço innecesary se não for crítico da missão.
adicionado o autor Manuel Ferreria, fonte

Eu começaria lendo o código fonte do hwclock.

2
adicionado
Por que ler o código em vez de simplesmente usá-lo?
adicionado o autor Kristopher Johnson, fonte
@iny, eu quis dizer "Por que ler a fonte para hwclock, quando você poderia simplesmente chamar hwclock?" Zan tinha uma boa resposta para isso.
adicionado o autor Kristopher Johnson, fonte
Você pode estar escrevendo para um sistema embarcado e não tem espaço para outro programa. Ou talvez você só queira saber por curiosidade.
adicionado o autor Zan Lynx, fonte
Correr "strace hwclock" é provavelmente o caminho mais rápido para satisfazer a curiosidade de alguém.
adicionado o autor sigjuice, fonte
Essa foi uma resposta à pergunta original. Eu não sei porque é necessário.
adicionado o autor iny, fonte

Se o editor de texto é diferente do kubuntu (kate é o padrão no editor), use o seu próprio comando com o comando sudo no terminal.

  1. run terminal
  2. copy and paste this command sudo kate /etc/default/rcS press Enter
  3. enter user password (your login password) press Enter
  4. text editor will open on the desktop
  5. change the line UTC=yes to UTC=no
  6. and click save (at top of text editor tab bar)
  7. reboot
0
adicionado
Brasil Linux
Brasil Linux
2 873 dos participantes

O primeiro e grande grupo sobre LINUX do Telegram, que temos como base o S.O. GNU/Linux, que vai de usuários iniciantes / avançados! Vejam nossos parceiros: http://urele.com/parceiros Desde: 16/11/2015

Técnicos em Informática
Técnicos em Informática
2 517 dos participantes

Um grupo com foco em assuntos técnicos, hardware, servidores e resolução de problemas em Windows e Linux. Canal: @dicasdeti

Linux
Linux
1 950 dos participantes

Grupo focado para compartilhar conhecimentos e tirar dúvidas sobre Linux + LPIC.Proibido a divulgação de materiais copyright e pirataria.Bot: @GrupoLinuxbot . Link: https://goo.gl/KQYqhN Steam: https://goo.gl/KgQ0yH Estatísticas: https://goo.gl/Ld1BKM

SysAdmin Brasil Linux
SysAdmin Brasil Linux
320 dos participantes

Sysadmin é o profissional responsável pelo ambiente de TI de uma organização. Isso normalmente compreende servidores, equipamentos de rede, acesso à Internet, serviços ao usuário, banco de dados, segurança e outros. Grupo parceiro: @BrasilLinux 23/06/17