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

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

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

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

1 ответ1

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 просто позволяет увидеть, когда сервер должен был быть перезапущен в последний раз.

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