충돌이 발생한 게임을 다시 시작하는 크론 작업

충돌이 발생한 게임을 다시 시작하는 크론 작업

그래서 저는 매우 변덕스럽고 Linux에서 충돌이 많이 발생할 수 있는 게임을 호스팅하고 있습니다. 저는 화면과 게임이 실패할 경우 다시 시작하도록 다음 cronjob을 만들었습니다.

#!/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

cron 작업은 화면 이름이 존재하지 않는 경우 게임 서버를 시작하는 데 잘 작동합니다. 그러나 게임이 실행 중이고 충돌이 발생하면 cronjob이 작동하지 않고 게임이 다시 시작되지 않습니다.

그러나 게임은 이미 화면 이름 ss13에서 실행 중이며 화면 자체는 충돌하지 않고 게임만 충돌합니다. 그래서 제 생각에는 게임이 충돌할 때 게임이 포함된 새 화면을 만들려고 시도하지만 분명히 그렇게 할 수 없다는 것입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 여기에는 여전히 꽤 리눅스 멍청한 놈이 있습니다.

답변1

이것은 실제로 에 대한 작업이 아닙니다 cron. 세션 내에서 다음과 같은 실행을 제안합니다 screen.

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

:의 줄임말입니다 true.

위의 내용은 게임이 데몬화되지 않는다고 가정합니다. 이 경우 다음을 사용하십시오.

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

답변2

저는 화면 사용에 익숙하지만 여기서 무엇을 하려는지 잘 모르겠습니다. 서버가 자동으로 다시 시작되도록 하려면 실제로 화면이 필요하지 않습니다. 아마도 충돌 직후(5초 후 대신) 다시 시작하는 스크립트를 선호할 것입니다.

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

관련 정보