você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Horário de Verão - 2008

Colaboração: Smailli Hemori Moraes

Data de Publicação: 26 de September de 2008

Todos aqui no Brasil sabemos que o horário de verão não obedece um dia fixo para inicio ou fim e é por isso que todo ano temos que gerar um novo /etc/localtime com as informações de horário de verão do ano em questão.

Agora se você esta cansado de todo ano ser a mesma coisa.

Cria arquivo texto, cria o binario com o zic, copia para /etc...

É só utilizar o script abaixo.

#!/bin/bash

ANO_INICIO="2008" #Ano que inicia o Horario de verao
ANO_FIM="2009" #Ano que finaliza o Horario de verao
DIA_INICIO="Oct 19" #Mes (abreviado em Ingles) e dia que inicia o horário de verão
DIA_FIM="Feb 15" #Mes (abreviado em Ingles) e dia que finaliza o horário de verão

RM=/bin/rm
CP=/bin/cp
BIN=/usr/sbin/zic
ZDUMP=/usr/sbin/zdump
MD5BIN=/usr/bin/md5sum
SERVICE=/sbin/service
ZIC=/usr/share/zoneinfo/Brazil/verao.$ANO_INICIO-$ANO_FIM.zic
EAST=/usr/share/zoneinfo/Brazil/East
LOCALTIME=/etc/localtime

echo -ne "\nVerificando a existencia do programa $BIN"
if [ -x $BIN ] ; then
      echo -ne "\t\t\t\t\E[32m[ OK ]\n" ; tput sgr0
else
      echo -ne "\t\t\t\t\E[31m[ERRO]\n" ; tput sgr0
      exit
fi

echo -ne "\nCriando o arquivo de configurações do horário de verão $ANO_INICIO-$ANO_FIM"
cat > $ZIC << EOF
Rule Brazil $ANO_INICIO only - $DIA_INICIO 00:00 1 S
Rule Brazil $ANO_FIM only - $DIA_FIM 00:00 0 -

Zone Brazil/East -3:00 Brazil BR%sT
EOF

SAIDA=$?

if [ $SAIDA = 0 ] ;then
      echo -ne "\t\t\E[32m[ OK ]\n" ; tput sgr0
else
      echo -ne "\t\t\E[31m[ERRO]\n" ; tput sgr0
      exit
fi

echo -ne "\nCriando o binário com as informações do horário de verão $ANO_INICIO-$ANO_FIM"

if $BIN $ZIC ;then
      echo -ne "\t\t\E[32m[ OK ]\n" ; tput sgr0
else
      echo -ne "\t\t\E[31m[ERRO]\n" ; tput sgr0
      exit
fi

echo -ne "\nRemovendo informações do horário de verão antigo"

if $RM $LOCALTIME ;then
      echo -ne "\t\t\t\t\E[32m[ OK ]\n" ; tput sgr0
else
      echo -ne "\t\t\t\t\E[31m[ERRO]\n" ; tput sgr0
      exit
fi

echo -ne "\nAtivando as configurações para o horário de verão $ANO_INICIO-$ANO_FIM"

if $CP $EAST $LOCALTIME ;then
      echo -ne "\t\t\t\E[32m[ OK ]\n" ; tput sgr0
else
      echo -ne "\t\t\t\E[31m[ERRO]\n" ; tput sgr0
      exit
fi

echo -ne "\nVerificando o status da ativação"

GREP=`echo $ANO_INICIO | cut -c 4``echo $ANO_FIM | cut -c 4`
DUMP=`zdump -v Brazil/East |grep 200[$GREP] | wc -l`

if [ "$DUMP" == "4" ] ; then
      echo -ne "\t\t\t\t\t\t\E[32m[ OK ]\n" ; tput sgr0
else
      echo -ne "\t\t\t\t\t\t\E[31m[ERRO]\n" ; tput sgr0
      exit
fi

echo -ne "\nReiniciando o crontab\n\n"

$SERVICE crond restart

Então é só criar o script acima, alterar as variáveis ANO_INICIO, ANO_FIM, DIA_INICIO e DIA_FIM conforme o exemplo do horário de verão desse ano rodar o script em seus servidores e estações e ir tomar uma cerveja para comemorar.

Lembrando que esse script foi homologado para sistemas baseados em Red Hat mas deve funcionar em outros com a modificação das variáveis dos binários ou sem modificação de nada.



Veja a relação completa dos artigos de Smailli Hemori Moraes