Сценарий init.d не запускается при запуске


15

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

#! /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?

Ответы:


33

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

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

sudo update-rc.d css-servers defaults

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

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

sudo service css-servers start

Это очень странно. До этого момента мой скрипт запускался при запуске без этой update-rc.dкоманды. Я обновил свой скрипт, после чего он больше не запускался, пока не запустил эту команду. Благодарю. Кстати, как мы можем «отменить» его запуск при запуске (как мы делали с update-rc.d)?
Никос

1
@ Nik-Lz Этот раздел вопросов и ответов относится к старым и устаревшим версиям Ubuntu, которые использовали upstart. Он больше не должен использоваться, вместо него должен использоваться текущий systemd (который использует совершенно другую сервисную систему).
Майкл Хэмптон

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каталоги уровня запуска.


1

Если вы не понимаете, почему ваш сервис не запускается при загрузке. Тем не менее, он работает правильно, когда вы пытаетесь запустить службу вручную 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.