Obrigado pela sugestão.
A verdade nua e crua é que eu sei como resolver isso, apenas não tive tempo ainda pra fazer as mudanças no programa.
Tem o meu trabalho que me toma bastante tempo, gerenciar um provedor de internet não é mole.
Tem o trabalho nos projetos da comunidade, que vão além do que vocês visualizam aqui no fórum, coisas pro futuro, conversas com outros grupos, reuniões pra conseguir apoio, etc.
No final disso tudo sobre pouco tempo.
Que eu uso pra estudar, me manter atualizado e reciclar conhecimento, fazer manutenção em máquinas (as minhas e do datacenter), etc.
Nos finais de semana que consigo atualizar os códigos e por em prática.
Já que você é programador eu vou dar mais detalhes como funciona hoje o programa, resumidamente.
O servidor tem uma espécie de ping interno, um pacote UDP com um byte específico que enviado ao servidor ele responde com 0x00. Caso ele responder com esse byte de retorno, tudo ok.
Caso não responder, após o timeout eu inicio a sequencia de reinicialização.
mata processo morto do servidor, desliga MYsql, liga mysql, liga servidor, aguarda 10 minutos pra ele se estabelecer e volta a monitorar.
Depois veio o bug do "patching world" ou "waiting for server", que é a porta TCP que deixa de esperar conexão, impedindo novos players de entrarem. ainda assim o pacote UDP respondia.
Então eu adicionei mais uma checagem, verificando também a porta TCP.
Agora depois desse patch o pacote UDP que não é respondido quando tem as funções que rodam no "amanhecer".
Vocês notam no jogo que até trava quando isso acontece. Isso porque o servidor não faz mais nada enquanto está processando isso.
Era pra ter uma thread separada respondendo os pings, mas nada... Culpa dos devs.
Ping local ICMP sempre iria resultar em resposta positiva porque o programa roda local, na mesma máquina onde está o Lif server.
A alteração que vou fazer é justamente na primeira vez que falhar ele esperar 5 minutos, fazer nova checagem e se falhar novamente eu inicio o processo de restart.
Vou precisar de meia hora pra refazer os códigos, e tempo pra testar tudo em produção.
Imagine que eu preciso tirar umas 3 horas pra ter certeza que tudo ta certo e poder partir pra outra tarefa.
3 horas, que no momento ainda não consegui arranjar este tempo.

.