
그래서 저는 매우 변덕스럽고 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