Cron Job que tela de botas no início

0

Estou tentando configurar vários processos que iniciam durante a inicialização (servidores para jogos) com o comando abaixo como o item cron:

@reboot /usr/bin/screen -fa -d -m -S NAME COMMAND

No entanto, se o servidor falhar por qualquer motivo que a tela feche e o servidor não tiver a chance de executá-lo, ele será reinicializado automaticamente (até onde eu entendi; a tela não vê nenhum processo no soquete).

Existe uma maneira que eu possa contornar isso, então a tela ficará lá mesmo se nada estiver sendo executado? Como abrir uma concha?

    
por Pez Cuckow 08.01.2011 / 21:19

1 resposta

0

O comando dado é o filho da tela, então quando ele sai, a janela está morta.

Você pode contornar isso iniciando um shell e, em seguida, empurrando a entrada para a janela para executar o comando, mas isso apenas altera o problema para que você fique com um prompt de shell persistente e o servidor não reiniciar.

Realmente, você quer executar um comando keep-alive, que então executa o servidor que você está interessado. Há muitas ferramentas lá fora, mas o mais simples é escrever algo com shell (a menos que você queira o poder total das ferramentas dedicadas.

#!/bin/sh
while [ ! -f /home/servicename/shutdown-flagfile ]; do
  echo "Starting server [$(date)]"
  server-binary-name "$@"
  sleep 1
done

A linha 2 permite sair do loop criando um arquivo especial (com "touch"), o server-binary-name é o programa que realmente roda, "$ @" é passar pelas opções que o wrapper foi chamado com, e sleep 1 é para que, se o servidor estiver morrendo na inicialização, você não mastigue toda a CPU repetidamente, reiniciando-o milhares de vezes por segundo, de modo que seja difícil entrar e ver o que está acontecendo. A linha de eco permite que você veja quando o último servidor teve que ser reiniciado.

    
por 09.01.2011 / 01:07