Como mudar o horário de máquinas virtuais de Azure PaaS Cloud Services usando Startup Tasks.

Por: Leonardo Villar

Todas as maquinas virtuais em Azure PaaS Cloud Services, trabalham com o horário local UTC (ou GMT) por padrão, e existem alguns casos onde o cliente por vários motivos necessitam que os servidores trabalhem no seu horário local, no caso do Brasil, UTC-3.

A forma mais simples que pensamos para resolver esse problema seria de acessar o Servidor via RDP e mudar o horário manualmente, porém, isso irá funcionar apenas por um algum tempo pois devemos lembrar que maquinas virtuais PaaS, são “Stateless” ou seja, não mantém alterações manuais. Então, a solução seria a utilização de uma Startup Task e o comando “tzutil” para fazermos a mudança de Time Zone por linha de comando.

 

Passos:

1) Primeiro, precisamos montar o comando “tzutil”. Esse é o comando:

 

tzutil /s "Identificador do Horário"

Exemplo:

Comando para mudar o horário para “Pacific Standard Time” (PST):

tzutil /s "Pacific Standard Time"

Comando para mudar o horário para “South America Standard Time” (Horário de Brasília)

tzutil /s " E. South America Standard Time” (Esse é o comando que vamos utilizar)

 

Nota 1: Você pode encontrar o horário que você está utilizando na sua máquina usando o seguinte comando:

tzutil /g

Exemplo:

c:\>tzutil /g

Pacific Standard Time

c:\>

Nota 2: Você pode encontrar uma lista com todos os horários utilizando o comando ‘tzutil /l

 

2) Crie um arquivo chamado “timechange.cmd” e insira o comando que acabamos de montar:

tzutil /s " E. South America Standard Time”

 

 

3) Para a Worker Role (Se você for aplicar o procedimento em uma Web Role, *** para o passo 4):

a) Na Solution Explorer, abaixo de Roles no seu projeto Cloud Services, clique com o botão direito na role e selecione Add>New Folder. Crie uma pasta chamada Startup

b) Clique com o botão direito na pasta Startup e selecione Add>Existing Item. Selecione o arquivo timechange.cmd o adicione na pasta Startup

 

clip_image002

 

 

4) Agora, você terá que criar a startup task propriamente dita, para isso, você precisará adicionar as seguintes linhas no arquivo de configuração ServiceDefinition.csdef abaixo de WebRole ou WorkerRole. Para mais informações sobre Startup Tasks, veja: Run Startup Tasks in Azure.

 

    <Startup>

         <Task commandLine="Startup\ timechange.cmd" executionContext="elevated" taskType="simple" />

            </Startup>

 

Nota: As configurações acima irão executar o arquivo timechange.cmd que irá fazer a alteração do horário da forma que você configurou. Essa operação sempre acontece antes da sua aplicação ser configurada e uma falha nesse processo irá impedir que a Role seja iniciada.

 

5) Para Web Role:

a) Na Solution Explorer, clique com o botão direito no projeto da sua Web Role, e selecione Add>Existing Item. Selecione o arquivo timechange.cmd (O arquivo ficará no mesmo nível que o web.config).

b) Vá nas propriedades do arquivo recém adicionado e mude a propriedade “Copy to Output Directory” para “Copy Aways”

clip_image004

 

6) Agora, você terá que criar a startup task, para isso, você precisará adicionar as seguintes linhas no arquivo de configuração ServiceDefinition.csdef abaixo de WebRole ou WorkerRole. Para mais informações sobre Startup Tasks, veja: Run Startup Tasks in Azure.

 

    <Startup>

         <Task commandLine="timechange.cmd" executionContext="elevated" taskType="simple" />

            </Startup>

 

7) Faça um novo Deploy.