скрипт init.d не працює при запуску


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?

Відповіді:


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, які використовуються на початку. Він більше не повинен використовуватися, натомість слід застосовувати поточну систему (яка використовує зовсім іншу систему обслуговування).
Майкл Хемптон

7

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

Вони запускаються в порядку, визначеному символічними посиланнями /etc/rc*.dкаталогів. У кожного рівня запуску є своя директорія. Сценарії з іменами посилань, що починаються з K, виконуються з параметром стоп, а ті з іменами, що починаються з S, виконуються з параметром start. За умовами імена файлів починаються з Kабо Sслідує двозначне число, яке використовується для послідовності, і закінчується іменем сценарію в /etc/init.d.

Посилання можна створювати вручну, але зазвичай створюються за допомогою сценарію. Загальний сценарій update-rc.dдоступний на Ubuntu. Команда man update-rc.dдасть вам документацію щодо того, ким її використовувати. У вашому випадку спробуйте:

sudo update-rc.d css-servers defaults

Щоб почати його за допомогою сценарію init, спробуйте:

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

Я зазвичай запускаю та зупиняю сервер таким чином, щоб переконатися, що сценарій працює як потрібно. Потім я запускаю, update-rc.dщоб додати його до /etc/rc.dкаталогів runlevel.


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.