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
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”
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.