Uso correto de TZ, data e hwclock?

5

Estou trabalhando em uma distribuição Linux ARM / ulibc desenvolvida pela Buildroot para uma placa customizada. Estou tentando entender a relação entre

Se eu fizer isso, como já vi em alguns exemplos on-line:

# date --set "2013-04-09 15:06:30"
Tue Apr  9 15:06:30 CDT 2013
# hwclock --systohc --utc
# hwclock
Tue Apr  9 15:06:39 2013  -0.351552 seconds

e reinicie, recebo:

.... boot messages ...
... setting system clock to 2013-04-09 20:07:31 UTC (1365538051)
.... boot messages ...
#
# date; hwclock;
Tue Apr  9 15:08:24 CDT 2013
Tue Apr  9 15:08:25 2013  -0.473164 seconds
#
# date -u; hwclock -u;
Tue Apr  9 20:08:44 UTC 2013
Tue Apr  9 15:08:45 2013  -0.397120 seconds
#
# date; hwclock --localtime
Tue Apr  9 15:09:07 CDT 2013
Tue Apr  9 20:09:08 2013  -0.686601 seconds
#

Então, parece que o hwclock acha que o localtime é UTC? E, por algum motivo, ao aplicar -u , na verdade, aplica o fuso horário? Estou um pouco confuso. Alguém pode sugerir como eu deveria estar fazendo isso?

EDITAR: Eu deveria notar que sendo um sistema ARM + Busybox + uclibc, mais enxuto, eu não tenho muitos diretórios e arquivos típicos, como sysconfig e zoneinfo.

    
por trycatch 09.04.2013 / 22:31

2 respostas

1

--utc informa hwclock que o clock do hardware mantém UTC e --localtime diz que o clock do hardware mantém o mesmo fuso horário que o clock do sistema. (Mais precisamente, ele diz que o clock do hardware mantém o mesmo offset do UTC que o clock do sistema atualmente faz - os relógios de hardware geralmente não sabem se o DST está ativo.) Estas opções não têm relação com o fuso horário do clock do sistema. / p>

Em teoria, isso diz tudo o que você precisa saber. Na prática, isso pode ser confuso.

# date -u; hwclock -u;
Tue Apr  9 20:08:44 UTC 2013
Tue Apr  9 15:08:45 2013  -0.397120 seconds

“Primeiro, diga-me a hora do sistema no UTC. Então, assumindo que o clock do hardware mantém o UTC, qual é a hora no fuso horário local? ”

# date; hwclock --localtime
Tue Apr  9 15:09:07 CDT 2013
Tue Apr  9 20:09:08 2013  -0.686601 seconds

Primeiro, diga-me a hora do sistema no fuso horário local. Então, assumindo que o relógio do hardware mantém a hora local, qual é a hora no fuso horário local? ”

Na maioria dos sistemas, você pode definir a variável de ambiente TZ para definir o fuso horário de um processo. É um recurso POSIX. BusyBox suporta isso (eu não vejo uma opção para desligá-lo em tempo de compilação), e eu acredito que o faz uClibc. Ao trabalhar na sincronização do relógio, pode ajudar a operar tudo no UTC por um curto período:

export TZ=UTC0
date
hwclock
    
por 10.04.2013 / 02:32
0

Eu configuro minhas informações de horário com os seguintes comandos:

# setup local timezone
rm /etc/localtime
# setup for EDT and EST (+4 EDT; +5 EST)
ln -s /usr/share/zoneinfo/EST5EDT /etc/localtime
# setup for only EST (+5 EST)
#ln -s /usr/share/zoneinfo/EST /etc/localtime
# setup for only Daylight Saving Time
#ln -s /usr/share/zoneinfo/EDT /etc/localtime

rm /etc/timezone
echo "US/Eastern" > /etc/timezone
export TZ="/usr/share/zoneinfo/America/New_York"

Nota: configure o clock do sistema após este script ser executado com o comando date -u MMDDhhmm usando o atomic watch enquanto o tempo do computador se desvia após o desligamento

    
por 09.04.2013 / 23:07