O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Tutoriais

Como Criar Script de Reinicialização Automática do Servidor MU

Aprenda a criar scripts batch e tarefas agendadas para reiniciar automaticamente seu servidor MU Online em caso de queda ou horários programados.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

Por Que Automatizar a Reinicialização do Servidor

Servidores MU Online privados rodam múltiplos processos simultaneamente — ConnectServer, DataServer, GameServer e EventServer — e qualquer um deles pode travar ou encerrar inesperadamente por vazamento de memória, erro de banco de dados ou pico de conexões. Sem automação, o servidor fica offline até o administrador perceber e agir manualmente.

Este tutorial cobre duas abordagens complementares:

  • Watchdog Script: monitora processos em tempo real e reinicia imediatamente após crash
  • Task Scheduler: reinicia os serviços em horários programados, como a madrugada
Nota: Este guia foi escrito para Windows Server 2012/2016/2019 com MuServer Season 6 Episode 3. Os scripts funcionam em versões anteriores com ajustes mínimos nos nomes dos executáveis.

Estrutura de Arquivos do Servidor MU

Antes de criar os scripts, confirme a estrutura de diretórios do seu servidor:

C:\MuServer\
├── ConnectServer\
│   └── ConnectServer.exe
├── DataServer\
│   └── DataServer.exe
├── GameServer\
│   └── GameServer.exe
├── EventServer\
│   └── EventServer.exe
└── Scripts\
    ├── start_all.bat
    ├── stop_all.bat
    └── watchdog.bat

Crie o diretório Scripts\ se ele não existir:

mkdir C:\MuServer\Scripts

Parte 1 — Script de Inicialização Completa

Passo 1: Criar o script de start

Crie o arquivo C:\MuServer\Scripts\start_all.bat:

@echo off
title ViciadosMU - Iniciando Servidor
cd /d C:\MuServer

echo [%date% %time%] Iniciando ConnectServer... >> C:\MuServer\Scripts\startup.log
start "ConnectServer" /D "C:\MuServer\ConnectServer\" ConnectServer.exe
timeout /t 5 /nobreak > nul

echo [%date% %time%] Iniciando DataServer... >> C:\MuServer\Scripts\startup.log
start "DataServer" /D "C:\MuServer\DataServer\" DataServer.exe
timeout /t 8 /nobreak > nul

echo [%date% %time%] Iniciando GameServer... >> C:\MuServer\Scripts\startup.log
start "GameServer" /D "C:\MuServer\GameServer\" GameServer.exe
timeout /t 10 /nobreak > nul

echo [%date% %time%] Iniciando EventServer... >> C:\MuServer\Scripts\startup.log
start "EventServer" /D "C:\MuServer\EventServer\" EventServer.exe

echo [%date% %time%] Todos os processos iniciados. >> C:\MuServer\Scripts\startup.log
Dica: Os delays com timeout /t são essenciais. O DataServer precisa estabelecer conexão com o SQL Server antes do GameServer iniciar. Reduza os tempos somente se o banco de dados estiver na mesma máquina e o hardware for rápido.

Passo 2: Criar o script de parada

Crie o arquivo C:\MuServer\Scripts\stop_all.bat:

@echo off
title ViciadosMU - Parando Servidor
echo [%date% %time%] Iniciando shutdown... >> C:\MuServer\Scripts\startup.log

taskkill /F /IM EventServer.exe /T 2>nul
timeout /t 3 /nobreak > nul
taskkill /F /IM GameServer.exe /T 2>nul
timeout /t 3 /nobreak > nul
taskkill /F /IM DataServer.exe /T 2>nul
timeout /t 3 /nobreak > nul
taskkill /F /IM ConnectServer.exe /T 2>nul

echo [%date% %time%] Shutdown concluido. >> C:\MuServer\Scripts\startup.log

A ordem de encerramento é inversa à de inicialização: EventServer → GameServer → DataServer → ConnectServer. Isso evita erros de desconexão abrupta no banco.


Parte 2 — Script Watchdog (Monitoramento em Tempo Real)

O watchdog verifica continuamente se os processos estão rodando e os reinicia caso encerrem inesperadamente.

Passo 3: Criar o watchdog.bat

Crie o arquivo C:\MuServer\Scripts\watchdog.bat:

@echo off
title ViciadosMU - Watchdog Ativo
set LOGFILE=C:\MuServer\Scripts\watchdog.log
set INTERVAL=30

:LOOP
echo [%date% %time%] Verificando processos... >> %LOGFILE%

:: Verifica ConnectServer
tasklist /FI "IMAGENAME eq ConnectServer.exe" 2>nul | find /I "ConnectServer.exe" > nul
if errorlevel 1 (
    echo [%date% %time%] ALERTA: ConnectServer.exe nao encontrado. Reiniciando... >> %LOGFILE%
    start "ConnectServer" /D "C:\MuServer\ConnectServer\" ConnectServer.exe
    timeout /t 5 /nobreak > nul
)

:: Verifica DataServer
tasklist /FI "IMAGENAME eq DataServer.exe" 2>nul | find /I "DataServer.exe" > nul
if errorlevel 1 (
    echo [%date% %time%] ALERTA: DataServer.exe nao encontrado. Reiniciando... >> %LOGFILE%
    start "DataServer" /D "C:\MuServer\DataServer\" DataServer.exe
    timeout /t 8 /nobreak > nul
)

:: Verifica GameServer
tasklist /FI "IMAGENAME eq GameServer.exe" 2>nul | find /I "GameServer.exe" > nul
if errorlevel 1 (
    echo [%date% %time%] ALERTA: GameServer.exe nao encontrado. Reiniciando... >> %LOGFILE%
    start "GameServer" /D "C:\MuServer\GameServer\" GameServer.exe
    timeout /t 10 /nobreak > nul
)

:: Verifica EventServer
tasklist /FI "IMAGENAME eq EventServer.exe" 2>nul | find /I "EventServer.exe" > nul
if errorlevel 1 (
    echo [%date% %time%] ALERTA: EventServer.exe nao encontrado. Reiniciando... >> %LOGFILE%
    start "EventServer" /D "C:\MuServer\EventServer\" EventServer.exe
)

timeout /t %INTERVAL% /nobreak > nul
goto LOOP
Atenção: O watchdog reinicia processos individualmente. Se o GameServer travar com o DataServer ainda rodando, apenas o GameServer é reiniciado, evitando perda de dados desnecessária. Nunca chame stop_all.bat dentro do watchdog.

Parte 3 — Reinicialização Programada via Task Scheduler

Para servidores com reinicialização diária programada, como às 04:00, para limpeza de memória e manutenção:

Passo 4: Criar o script de restart agendado

Crie C:\MuServer\Scripts\scheduled_restart.bat:

@echo off
title ViciadosMU - Restart Agendado
set LOGFILE=C:\MuServer\Scripts\scheduled.log

echo [%date% %time%] Iniciando restart agendado... >> %LOGFILE%

:: Para todos os processos
call C:\MuServer\Scripts\stop_all.bat
timeout /t 15 /nobreak > nul

:: Remove logs com mais de 7 dias
forfiles /p C:\MuServer\Scripts\ /m *.log /d -7 /c "cmd /c del @path" 2>nul

:: Reinicia todos os processos
call C:\MuServer\Scripts\start_all.bat

echo [%date% %time%] Restart agendado concluido. >> %LOGFILE%

Passo 5: Configurar o Task Scheduler do Windows

Execute os comandos abaixo no Prompt de Comando como Administrador:

:: Criar tarefa de restart diário às 04:00
schtasks /create /tn "MuServer_DailyRestart" /tr "C:\MuServer\Scripts\scheduled_restart.bat" /sc daily /st 04:00 /ru SYSTEM /f

:: Criar tarefa para iniciar o watchdog no boot do sistema
schtasks /create /tn "MuServer_Watchdog" /tr "C:\MuServer\Scripts\watchdog.bat" /sc onstart /delay 0002:00 /ru SYSTEM /f
Dica: O delay de 2 minutos (/delay 0002:00) garante que o SQL Server já esteja completamente inicializado antes do watchdog começar a monitorar. Ajuste para 0003:00 em servidores com SQL Server instalado em HDD ao invés de SSD.

Passo 6: Verificar as tarefas criadas

schtasks /query /tn "MuServer_DailyRestart" /fo LIST
schtasks /query /tn "MuServer_Watchdog" /fo LIST

A saída deve mostrar Status: Ready para ambas as tarefas.


Parte 4 — Registro de Crashes no SQL Server

Para manter histórico de restarts no banco de dados e identificar padrões de instabilidade:

Passo 7: Criar tabela de log no banco

USE MuOnline
GO

CREATE TABLE T_ServerRestartLog (
    LogID       INT IDENTITY(1,1) PRIMARY KEY,
    RestartTime DATETIME DEFAULT GETDATE(),
    ProcessName NVARCHAR(50)  NOT NULL,
    RestartType NVARCHAR(20)  NOT NULL,  -- 'CRASH', 'SCHEDULED', 'MANUAL'
    Notes       NVARCHAR(255) NULL
)
GO

CREATE INDEX IX_ServerRestartLog_Time
    ON T_ServerRestartLog (RestartTime DESC)
GO

Passo 8: Integrar sqlcmd ao watchdog

Dentro de cada bloco de restart no watchdog.bat, adicione a chamada ao sqlcmd logo após o comando start:

:: Bloco do GameServer como exemplo:
if errorlevel 1 (
    echo [%date% %time%] ALERTA: GameServer.exe nao encontrado. Reiniciando... >> %LOGFILE%
    start "GameServer" /D "C:\MuServer\GameServer\" GameServer.exe
    sqlcmd -S localhost -d MuOnline -E -Q "INSERT INTO T_ServerRestartLog (ProcessName, RestartType) VALUES ('GameServer', 'CRASH')"
    timeout /t 10 /nobreak > nul
)
Nota: Use -E para autenticacao Windows Integrated ou substitua por -U sa -P SuaSenha para SQL Authentication. Em producao, armazene credenciais em variaveis de ambiente do Windows e nao em texto puro no script .bat.

Para consultar o histórico de crashes das últimas 24 horas:

SELECT ProcessName, RestartType, RestartTime
FROM MuOnline..T_ServerRestartLog
WHERE RestartTime >= DATEADD(HOUR, -24, GETDATE())
ORDER BY RestartTime DESC

Troubleshooting

Processo reinicia mas fecha imediatamente: Verifique o log de erros do executável. O GameServer.exe gera registros em C:\MuServer\GameServer\Log\. Erros de conexão com o banco são os mais comuns — confirme a string de conexão em C:\MuServer\GameServer\Data\GameServerInfo.ini, especialmente os valores ServerAddress, ServerPort e DbName.

Watchdog não detecta que o processo caiu: Confirme o nome exato do executável com tasklist | findstr /I "server". Alguns builds usam nomes como MuGameServer.exe ou gs.exe. Atualize o nome no script conforme o resultado.

Task Scheduler não executa o script: A conta SYSTEM precisa de acesso de leitura e escrita em C:\MuServer\. Corrija as permissões com:

icacls C:\MuServer /grant "NT AUTHORITY\SYSTEM:(OI)(CI)F" /T

Log do watchdog cresce indefinidamente: Use rotação diária incorporando a data no nome do arquivo:

set LOGFILE=C:\MuServer\Scripts\watchdog_%date:~6,4%%date:~3,2%%date:~0,2%.log

GameServer não conecta ao banco após restart automático: O SQL Server pode não ter terminado de inicializar. Aumente o delay do watchdog no boot de 0002:00 para 0005:00 e adicione uma verificação de serviço antes de iniciar os processos MU:

:WAIT_SQL
sc query MSSQLSERVER | find "RUNNING" > nul
if errorlevel 1 (
    timeout /t 10 /nobreak > nul
    goto WAIT_SQL
)
call C:\MuServer\Scripts\start_all.bat

Perguntas frequentes

O script pode reiniciar apenas um componente específico, como o GameServer?

Sim. Crie um arquivo .bat separado para cada processo e aponte o monitoramento apenas para o executável desejado, como GameServer.exe. Cada componente pode ter seu próprio watchdog independente.

Como evitar que o script reinicie o servidor durante Castle Siege?

Adicione uma verificação SQL antes do restart: SELECT SiegeState FROM MuOnline..T_CastleSiegeState. Se retornar 1, o script aguarda e verifica novamente em 5 minutos com timeout /t 300 antes de prosseguir.

O Task Scheduler é confiável para manter o servidor no ar 24/7?

Para produção, combine o Task Scheduler com um watchdog em loop contínuo. O Task Scheduler sozinho só reinicia em horários fixos e não detecta crash em tempo real.

Qual o intervalo mínimo recomendado entre verificações do watchdog?

30 segundos é o mínimo prático. Intervalos menores consomem CPU desnecessariamente. Para servidores com alto volume de jogadores, use 60 segundos e combine com alertas por e-mail via blat.exe.

EQ

Equipe ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados