Задание Cron, которое загружает экран при запуске

0

Я пытаюсь настроить ряд процессов, которые запускаются во время загрузки (серверы для игр), с помощью следующей команды в качестве элемента cron:

@reboot /usr/bin/screen -fa -d -m -S NAME COMMAND

Однако если по какой-либо причине происходит сбой сервера, и экран не закрывается, и сервер не получает возможности запустить его автоматический перезапуск (насколько я понимаю; экран не видит процессов в сокете и закрывается).

Есть ли способ, которым я могу обойти это, чтобы экран сидел там, даже если в нем ничего не работает? Как открыть оболочку?

Pez Cuckow
источник
Как реализован автозапуск? Часть самого кода сервера или внешний скрипт?
grawity
Я думаю, что это часть самого сервера, srcds_run открывает сервер и запускает cron
Pez Cuckow

Ответы:

0

Данная команда является дочерней по отношению к экрану, поэтому при ее выходе окно становится мертвым.

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

На самом деле, вы хотите запустить команду keep-alive, которая затем запускает интересующий вас сервер. Существует множество инструментов, но самое простое - написать что-то в оболочке самостоятельно (если вы не хотите использовать все возможности выделенных инструментов).

#!/bin/sh
while [ ! -f /home/servicename/shutdown-flagfile ]; do
  echo "Starting server [$(date)]"
  server-binary-name "$@"
  sleep 1
done

Строка 2 позволяет вам выйти из цикла, создав специальный файл (с «прикосновением»), имя-сервера-сервера - это программа, которая действительно запускается, «$ @» - чтобы пройти через опции, которые вызывал обертка и режим сна 1 означает, что если сервер умирает при запуске, вы не жуете весь ЦП, многократно перезагружая его тысячи раз в секунду, так что трудно войти и посмотреть, что происходит. Строка echo просто позволяет увидеть, когда сервер должен был быть перезапущен в последний раз.

Phil P
источник