Parando enquanto festança

0

Eu uso este bash.sh para iniciar e reiniciar a falha do meu servidor de jogo. É executado @reboot

while true; do
./Server
done

Periodicamente, preciso atualizar esse servidor enquanto ele está desativado. Desligá-lo parece impossível. Em outros scripts e linguagens eu uso um

if ($exists(filename.txt)) { halt }

no loop while de um processo de outra forma inquebrável que me permite colocar um único arquivo vazio no diretório do processo que, se presente, impede que o script reinicie o processo, uma vez morto. Esta parece ser a solução mais fácil para mim. Como posso fazer isso neste caso?

    
por WerewolF 25.07.2017 / 09:53

2 respostas

6

Isso seria:

until [ -e filename.txt ]; do
  ./Server
done

O mesmo que:

while [ ! -e filename.txt ]; do
  ./Server
done

Se no Linux, você também pode:

while true; do
  # wait for filename.txt to be removed if it's there:
  inotifywait -qe DELETE_SELF filename.txt 2> /dev/null
  ./Server
done

Para impedir que Server seja iniciado enquanto o arquivo estiver lá, mas comece novamente assim que ele for removido.

Se você for o administrador da máquina, faria mais sentido adicioná-la como um serviço manipulado pelo seu sistema de inicialização que cuidaria de daemonizar corretamente, reiniciar (respawn) na saída inesperada, se necessário, etc. , você faria service whatever stop antes da edição e start depois.

    
por 25.07.2017 / 11:21
0

Você pode usar o comando break da seguinte forma:

while true; do
    ./Server
    if [ -e filename.txt ] ; then
        break
    fi
done

Mas o script acima será executado o tempo todo ./Server , o que pode ser perigoso

    
por 25.07.2017 / 09:56

Tags