15

Я размещаю некоторые игровые серверы Counter-Strike на своем выделенном сервере, используя экран. У меня есть этот скрипт, который я запускаю, когда хочу запустить / остановить серверы:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

Я поместил этот скрипт (называемый css-servers) в /etc/init.d/ и, насколько мне известно, он запускается при загрузке системы. Однако, когда я проверяю активные экраны с помощью screen -ls они не запускаются.

Как я могу заставить их работать при запуске под Ubuntu Server?

3 ответа3

29

Просто наличие скрипта в /etc/init.d недостаточно для запуска при запуске.

Чтобы добавить его в свой стартап, вы должны сообщить об этом Ubuntu:

sudo update-rc.d css-servers defaults

Затем он должен запуститься при следующей загрузке, если скрипт правильно отформатирован, установлен исполняемый бит и т.д. Пакеты, которые вы устанавливаете из apt-get/Software Center, автоматически запускают эту команду или ее эквивалент, поэтому обычно вы этого не делаете. надо беспокоиться об этом.

Если вы хотите запустить его немедленно, вы можете позвонить напрямую:

sudo service css-servers start
7

Вы сделали первую часть. /etc/init.d - это то место, откуда запускаются сценарии инициализации. Однако они не запускаются автоматически.

Они запускаются в порядке, указанном символическими ссылками в /etc/rc*.d . Каждый уровень запуска имеет свой собственный каталог. Скрипты с именами ссылок, начинающимися с K , запускаются с параметром stop, а скрипты с именами, начинающимися с S , запускаются с параметром start. По соглашению имена файлов начинаются с K или S за которыми следует двухзначное число, используемое для упорядочения, и заканчиваются именем скрипта в /etc/init.d .

Ссылки могут быть созданы вручную, но обычно создаются с помощью скрипта. Общий скрипт update-rc.d доступен в Ubuntu. Команда man update-rc.d предоставит вам документацию о том, кто его использует. В вашем случае попробуйте:

sudo update-rc.d css-servers defaults

Чтобы запустить его с помощью сценария инициализации, попробуйте:

sudo /etc/init.d/css-servers start

Я обычно запускаю и останавливаю сервер таким образом, чтобы убедиться, что скрипт работает как нужно. Затем я запускаю update-rc.d чтобы добавить его в каталоги /etc/rc.d runlevel.

0

Если вы не понимаете, почему ваш сервис не запускается при загрузке. Тем не менее, он прекрасно запускается, если попытаться запустить его, пока вы вручную запускаете команду service <your service> start . Затем попробуйте перенаправить стандартный вывод и вывод ошибок в какой-либо файл. Что может дать вам некоторую подсказку, почему это не начинается

например, внутри вашего сценария

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0

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