Cron Job que reinicia jogo travado

Cron Job que reinicia jogo travado

Então estou hospedando um jogo que é muito temperamental e pode travar muito no Linux, fiz esse cronjob para reiniciar a tela e o jogo caso ele falhe:

#!/bin/bash
for t in {1..12} do
  if [ -z "$(ps -C game | grep game)" ]
  then
    /usr/bin/screen -d -m -S ss13 /usr/local/bin/game /home/gamefolder/game/game.dmb 1336
  fi
  sleep 5 
done

O cron job funciona perfeitamente para iniciar o servidor do jogo, caso o nome de tela não exista; no entanto, se o jogo estiver em execução e travar, o cronjob não funcionará e o jogo não será reiniciado.

Porém o jogo já está rodando na tela ss13 e a tela em si não trava, apenas o jogo. Então acho que o que acontece é que quando o jogo trava ele tenta fazer uma nova tela com o jogo dentro mas obviamente não consegue. Existe algum método melhor de fazer isso? Ainda sou um novato em Linux aqui.

Responder1

Este não é realmente um trabalho para cron, eu sugeriria algo como o seguinte executado dentro de uma screensessão:

while :; do
  /usr/local/bin/game /home/gamefolder/game/game.dmb 1336
done

:é uma abreviação de true.

O texto acima pressupõe que o jogo não seja daemonizado. Nesse caso use:

while :; do
  if [ -z "$(ps -C game | grep game)" ]; then
    /usr/local/bin/game /home/gamefolder/game/game.dmb 1336
  fi
  sleep 5
done

Responder2

Estou familiarizado com o uso da tela, mas não tenho certeza do que você está tentando fazer aqui. Se você deseja que o servidor seja reiniciado automaticamente, você realmente não precisa de tela para isso. Talvez você prefira um script que seja reiniciado imediatamente após uma falha (em vez de 5 segundos depois).

#!/bin/bash
for t in {1..12}
do
    /usr/local/bin/game /home/gamefolder /game/game.dmb 1336
done

informação relacionada