Como agendar reinicialização automática no Windows Server VPS

Aprenda a agendar reinicialização automática no Windows Server via Agendador de Tarefas e PowerShell, com janelas de manutenção seguras e logs.

Servidores Windows que rodam aplicações de longa duração — IIS hospedando APIs, serviços .NET, instâncias de SQL Server, gateways de integração — degradam gradualmente sem reinicialização. Memória fragmenta, handles do kernel acumulam, e atualizações pendentes ficam num estado intermediário que só um reboot resolve. Em produção, a prática estável é agendar reinicialização periódica numa janela de baixo tráfego.

Este tutorial cobre como configurar reinicialização automática num Windows Server VPS via Agendador de Tarefas (interface gráfica e linha de comando) e via PowerShell. Mostra também como adicionar avisos pra sessões RDP ativas, condições de aborto baseadas em carga, e logs auditáveis pra confirmar que cada janela executou. Tempo estimado: 25 minutos.

A audiência é sysadmin Windows que já tem o servidor configurado e quer automatizar o ciclo de manutenção sem depender de conexão manual no domingo de madrugada.

Pré-requisitos

Pré-requisitos

Windows Server 2019, 2022 ou 2025 com acesso administrativo (RDP ou console). PowerShell 5.1 ou superior (já vem instalado). A conta usada pra criar a tarefa precisa ter direito de logon como serviço e privilégio de desligar o sistema — administradores locais têm ambos por padrão.

Antes de começar, confirme os dados básicos da sessão. Estes valores são referenciados nos comandos abaixo:

Sistema Windows Server 2022
Conta Administrator
Shell PowerShell 5.1+
Janela alvo Domingo 04:00

Decisão: Agendador de Tarefas ou PowerShell

Existem dois caminhos pra agendar reboot no Windows. Cada um serve um cenário:

MétodoQuando usarLimitação
Agendador via GUIConfiguração única, sysadmin prefere cliqueDifícil versionar e replicar
Agendador via schtasksScript único reproduzívelSintaxe verbosa pra condições complexas
PowerShell Register-ScheduledTaskVersionamento, lógica condicional, múltiplos servidoresCurva de aprendizado maior

Pra um servidor único, Agendador via GUI é suficiente. Pra fleet de 5+ servidores ou se você usa configuração como código, PowerShell é o caminho. Vamos cobrir os três métodos — escolha o que se encaixa.

Método 1: Agendador via interface gráfica

A interface gráfica é a forma mais rápida pra um servidor isolado. Os passos abaixo criam uma tarefa que reinicia o servidor todo domingo às 4 da manhã.

01

Abra o Agendador de Tarefas. Pressione Win + R, digite taskschd.msc e tecle Enter.

No painel direito, clique em “Criar Tarefa” (não “Tarefa Básica” — você precisa das opções avançadas).

02

Na aba “Geral”, preencha:

  • Nome: Reboot Semanal Manutencao
  • Descrição: Reinicializacao automatica de manutencao - domingo 04:00
  • Selecione “Executar com privilégios mais altos”
  • Em “Configurar para”, selecione a versão do seu Windows Server

Marque “Executar estando o usuário conectado ou não” — isso garante execução mesmo sem sessão RDP ativa.

03

Aba “Gatilhos” → “Novo”. Configure:

  • Iniciar a tarefa: “Em um agendamento”
  • Semanalmente, recorrer a cada 1 semana
  • Dia: Domingo
  • Horário: 04:00:00

Em opções avançadas, marque “Habilitado” e deixe sem expiração.

04

Aba “Ações” → “Nova”. Configure:

  • Ação: “Iniciar um programa”
  • Programa/script: shutdown.exe
  • Adicionar argumentos: /r /t 600 /c "Manutencao semanal automatica" /f

O parâmetro /r força reboot (não shutdown), /t 600 dá 10 minutos de aviso pra usuários conectados, /c define a mensagem visível, e /f força fechamento de aplicações que não respondem.

05

Aba “Condições”. Desmarque “Iniciar a tarefa somente se o computador estiver ocioso” e “Iniciar a tarefa somente se o computador estiver na fonte de alimentação”. Em servidor, essas condições não fazem sentido e podem impedir execução.

Aba “Configurações”. Marque “Permitir que a tarefa seja executada sob demanda” e “Se a tarefa falhar, reiniciar a cada 1 minuto, tentar reiniciar até 3 vezes”.

Clique OK. Você será solicitado a inserir a senha da conta — informe.

Teste antes de confiar

Clique com botão direito na tarefa criada e selecione “Executar”. O reboot deve disparar com aviso visível. Reconecte depois e confirme que tudo subiu. Tarefa que nunca foi testada manualmente costuma falhar na primeira execução agendada.

Método 2: Criação via schtasks

Pra scriptar o mesmo agendamento numa linha — útil em provisioning ou pra documentar configuração — use schtasks.

01

Abra o PowerShell como administrador (clique direito → “Executar como administrador”) e execute:

schtasks /create `
  /tn "Reboot Semanal Manutencao" `
  /tr "shutdown.exe /r /t 600 /c 'Manutencao semanal automatica' /f" `
  /sc weekly /d SUN /st 04:00 `
  /ru "SYSTEM" /rl HIGHEST /f

O parâmetro /ru SYSTEM evita dependência de senha de conta — a tarefa roda como sistema. /rl HIGHEST garante privilégios elevados, e /f sobrescreve se a tarefa já existir.

02

Verifique que a tarefa foi criada:

schtasks /query /tn "Reboot Semanal Manutencao" /v /fo LIST

A saída mostra próximo horário de execução, estado, e última execução. Confirme que “Próxima Execução” cai no próximo domingo às 04:00.

Método 3: PowerShell com lógica condicional

Quando você precisa de condições mais complexas — abortar reboot se a CPU está acima de 80%, ou se um serviço crítico está em transação — encapsule a lógica num script e agende via Register-ScheduledTask.

01

Crie o script wrapper em C:\Scripts\reboot-semanal.ps1:

$LogPath = "C:\Scripts\reboot-semanal.log"
$Stamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

# Checa carga media de CPU dos ultimos 60s
$cpu = (Get-Counter '\Processor(_Total)\% Processor Time' `
  -SampleInterval 5 -MaxSamples 12).CounterSamples |
  Measure-Object -Property CookedValue -Average

if ($cpu.Average -gt 80) {
    Add-Content $LogPath "$Stamp ABORT cpu=$([math]::Round($cpu.Average,1))%"
    exit 1
}

# Checa servico critico (ajuste o nome)
$svc = Get-Service -Name "MeuServicoCritico" -ErrorAction SilentlyContinue
if ($svc -and $svc.Status -eq 'Running') {
    # Logica de health check da aplicacao aqui
    Add-Content $LogPath "$Stamp OK servico ativo, prosseguindo"
}

Add-Content $LogPath "$Stamp REBOOT iniciando shutdown /r /t 600"
Start-Process -FilePath "shutdown.exe" `
  -ArgumentList "/r","/t","600","/c","Manutencao semanal","/f"

Esse script grava em log local cada execução, checa CPU média de 1 minuto, e só dispara o reboot se a condição for segura. Ajuste o nome do serviço e os limites pro seu cenário.

02

Registre a tarefa via PowerShell:

$Action = New-ScheduledTaskAction `
  -Execute "PowerShell.exe" `
  -Argument "-ExecutionPolicy Bypass -File C:\Scripts\reboot-semanal.ps1"

$Trigger = New-ScheduledTaskTrigger `
  -Weekly -DaysOfWeek Sunday -At 04:00

$Principal = New-ScheduledTaskPrincipal `
  -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest

$Settings = New-ScheduledTaskSettingsSet `
  -StartWhenAvailable -DontStopOnIdleEnd `
  -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)

Register-ScheduledTask `
  -TaskName "Reboot Semanal Manutencao" `
  -Action $Action -Trigger $Trigger `
  -Principal $Principal -Settings $Settings -Force

A flag -StartWhenAvailable é importante: se o servidor estava desligado no horário agendado e liga depois, a tarefa executa na próxima oportunidade em vez de pular.

Versione o script no Git

Commit reboot-semanal.ps1 num repositório de configuração da sua infra. Quando precisar ajustar o limite de CPU ou adicionar nova condição, edita uma vez e replica via Group Policy ou Ansible. Configuração espalhada em GUI vira dívida técnica em fleet de 5+ servidores.

Verificação

Confirme que a tarefa está ativa e o próximo horário está correto:

Get-ScheduledTask -TaskName "Reboot Semanal Manutencao" |
  Select-Object TaskName, State, @{N='Proximo';E={
    (Get-ScheduledTaskInfo $_).NextRunTime
  }}

Saída esperada:

TaskName                    State    Proximo
--------                    -----    -------
Reboot Semanal Manutencao   Ready    01/06/2026 04:00:00

Pra confirmar que a tarefa rodou após o primeiro domingo, consulte o histórico:

Get-ScheduledTaskInfo -TaskName "Reboot Semanal Manutencao"

O campo LastRunTime mostra quando rodou e LastTaskResult deve ser 0 (sucesso). Qualquer valor diferente indica falha — investigue via Agendador → Histórico ou via Get-WinEvent no log “Microsoft-Windows-TaskScheduler/Operational”.

Resolução de problemas

Tarefa não executa, sem mensagem de erro

Verifique se o histórico do Agendador está habilitado. Por padrão, em alguns Windows Server vem desabilitado, e isso impede ver o que aconteceu. No painel direito do Agendador, clique em “Habilitar Histórico de Todas as Tarefas”.

Depois disso, abra a tarefa e veja a aba Histórico. Se o evento for “Tarefa não iniciada porque a conta não está conectada” — você esqueceu de marcar “Executar estando o usuário conectado ou não” na criação.

Reboot dispara mas servidor não sobe

Verifique se algum serviço com startup automático está falhando no boot. Execute após reconectar:

Get-EventLog -LogName System -EntryType Error -Newest 20 |
  Where-Object {$_.Source -like "*Service*"}

Serviço travado em estado “Starting” indefinidamente é a causa mais comum. Geralmente é dependência de rede ou banco que ainda não estabilizou — adicione delay no startup do serviço problemático.

Cuidado com loop de reboot

Se o servidor entra em loop reiniciando, conecte via console (não RDP) e desabilite a tarefa antes de qualquer coisa: Disable-ScheduledTask -TaskName "Reboot Semanal Manutencao". Em VPS, console é o acesso via painel de controle — RDP não funcionará se a máquina reinicia antes da rede subir.

Aviso de reboot não aparece pra usuários RDP

O parâmetro /c "mensagem" só funciona se o usuário estiver com sessão ativa no momento que shutdown /t 600 roda. Se ele conectar depois do disparo, nada é mostrado. Pra notificação proativa, adicione antes do shutdown:

msg * /TIME:60 "Reboot programado em 10 minutos - salve seu trabalho"

msg.exe envia broadcast pra todas as sessões ativas — combinado com o aviso visual do shutdown, cobre os dois casos.

Próximos passos

Com o ciclo de reboot automatizado, vale evoluir em direções complementares:

  • Configure health check pós-reboot via PowerShell que valida serviços críticos e envia alerta se algo não subiu em 5 minutos.
  • Adicione gravação em event log (Write-EventLog) no script wrapper pra centralizar via syslog ou SIEM.
  • Documente a janela de manutenção em status page interna pra que equipe de aplicação saiba quando esperar indisponibilidade.
  • Combine com snapshot automático pré-reboot via API do seu provedor pra rollback rápido se algo quebrar.
  • Considere agendar separadamente Windows Update pra rodar antes do reboot, garantindo que o ciclo cobre atualizações pendentes.

Se você está colocando isso em produção, uma VPS Hostini Windows Server já vem com console fora-de-banda no painel — útil pra recuperar acesso se um reboot agendado quebrar a rede e RDP ficar indisponível, evitando depender de suporte pra resetar a máquina.

Perguntas frequentes

Posso agendar reinicialização sem desconectar os usuários RDP imediatamente?

Sim. O parâmetro /t do shutdown define um delay em segundos antes do reboot real, durante o qual usuários conectados recebem aviso visual. Use /t 600 pra dar 10 minutos de margem. Combine com /c "mensagem" pra explicar o motivo na notificação.

Como evito que o reboot agendado dispare se o servidor está sob alta carga?

Adicione uma condição de gatilho que checa o uso médio de CPU dos últimos minutos via PowerShell antes do Restart-Computer. Se exceder um limite, escreva no event log e aborte. O Agendador permite executar um script wrapper em vez do shutdown direto.

O Windows Update agenda reboots por conta própria — preciso desativar isso?

Em Windows Server, atualizações automáticas normalmente respeitam horas ativas e não reiniciam sozinhas se você usa WSUS ou agendamento manual. Mesmo assim, configure a política "No auto-restart with logged on users" pra garantir que apenas sua tarefa controla quando o reboot acontece.

Como verifico se a tarefa rodou de verdade na semana passada?

Abra o Agendador, selecione a tarefa e clique na aba Histórico — cada execução fica registrada com timestamp e código de saída. Pra auditoria persistente, ative gravação em event log no script (Write-EventLog) e consulte via Get-WinEvent.

Posso pular o reboot agendado se um serviço crítico estiver em transação ativa?

Sim, mas precisa de um script wrapper. Antes do Restart-Computer, consulte o estado do serviço (Get-Service, Get-Process, ou uma API de health check da aplicação) e retorne sem reiniciar se a condição não bater. Logue a decisão pra rastrear depois.

Qual o impacto real de não reiniciar um Windows Server por meses?

Memória fragmenta, handles do kernel acumulam, pool não-paginado cresce, e atualizações pendentes ficam em estado intermediário. Aplicações .NET de longo uptime mostram degradação perceptível depois de 30-60 dias. Reboot semanal ou quinzenal é o equilíbrio comum em produção.

Tópicos:
Próximos passos Cloud Ryzen com NVMe e proteção DDoS sempre ativa.Coloque em produção numa VPS Hostini →
Esse tutorial foi útil?
Falar no WhatsApp