Como posso verificar se o fuso horário foi alterado em um script bash?

3

Eu tenho um shell script que é executado via crontab, mas os comandos nele são dependentes do fuso horário (eles atualizam uma tabela no banco de dados todos os dias. Se o script for executado durante o horário de uma alteração do DST, ele replicará o período inconsistente de dados.

Estou planejando usar um script de wrapper que:

  1. Verifica se o fuso horário entre hoje e amanhã é diferente
  2. executa o script filho somente se a primeira verificação retornar falso (não é diferente)

Há muitas informações sobre como alterar o fuso horário, mas nada sobre como verificar se o fuso horário mudou no linux / bash.

    
por Payal Singh 18.11.2014 / 22:50

2 respostas

3

O seguinte testa se o fuso horário local foi alterado desde ontem:

[ "$(date -d "yesterday" '+%z')" = "$(date '+%z')" ]

O formato %z solicita a data para retornar o fuso horário. O acima compara o resultado de hoje com o resultado de ontem.

Como usar

O comando de teste pode ser usado para controlar a execução de instruções:

$ [ "$(date -d "yesterday" '+%z')" = "$(date '+%z')" ] && echo "No change"
No change

Ou

$ if [ "$(date -d "yesterday" '+%z')" = "$(date '+%z')" ]; then  echo "No change"; fi
No change

Como funciona

A saída do formato %z é semelhante a:

$ date '+%z'
-0800
$ date -d yesterday '+%z'
-0800

O acima indica um atraso de 8 horas atrás do GMT. Esse atraso depende se estamos no horário de verão ou no horário padrão. Por exemplo:

$ date -d "nov 1, 2014" '+%z'
-0700

[ indica o comando text do bash. O comando a seguir compara os resultados de hoje versus ontem:

[ "$(date -d "yesterday" '+%z')" = "$(date '+%z')" ]
    
por 18.11.2014 / 23:12
0

Apenas um ponto de esclarecimento: date -d yesterday +%z dirá se ontem teria relatado um horário diferente para o mesmo horário de hoje, supondo que o sistema tenha sido definido para o mesmo fuso horário ontem. Ele não lhe dirá se alguém pode ter substituído o / etc / localtime com um fuso horário padrão diferente para todo o sistema.

A rigor, a economia de horário de verão não é uma mudança de fuso horário, é apenas uma alteração do deslocamento do seu fuso horário do UTC. Ainda é o mesmo fuso horário.

    
por 05.10.2018 / 05:28