2

Так что я принимаю игру, которая очень темпераментна и может сильно зависать в 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, и сам экран не падает, только игра. Поэтому я думаю, что происходит то, что, когда игра падает, она пытается создать новый экран с игрой, но, очевидно, не может. Есть ли лучший способ сделать это? Все еще довольно linoo noob здесь.

2 ответа2

2

Это не совсем работа для 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
0

Я знаком с использованием экрана, но я не совсем уверен, что вы пытаетесь сделать здесь. Если вы хотите, чтобы сервер автоматически перезагружался, вам не нужен экран для этого. Возможно, вы бы предпочли скрипт, который перезапускается сразу после сбоя (вместо 5 секунд спустя).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .