1

Я хочу создать простой скрипт запуска в Ubuntu 12.04:

myscript.sh

#!/bin/sh
sudo /etc/init.d/nginx start
cd ~/app/current
god -c config/resque.god
sudo /etc/init.d/redis-server start
echo "SCRIPT RUN"

У меня есть это в /etc/init.d/myscript.sh

Когда я делаю

sudo chkconfig --level 2345 myscript.sh

Я получаю myscript.sh 2345

Когда я делаю

 sudo chkconfig --add myscript.sh

я получил

insserv: warning: script 'K01myscript.sh' missing LSB tags and overrides
insserv: warning: script 'myscript.sh' missing LSB tags and overrides
The script you are attempting to invoke has been converted to an Upstart
job, but lsb-header is not supported for Upstart jobs.
insserv: warning: script 'dbus' missing LSB tags and overrides
....
myscript.sh               0:off  1:off  2:on   3:on   4:on   5:on   6:off

**** РЕДАКТИРОВАТЬ::

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

2 ответа2

2

Возможно, у вас также будут проблемы с строкой cd ~/app/current . ~ означает домашний каталог текущего пользователя. Я не знаю, какие пользовательские скрипты в init.d запускаются как root, я мог бы представить, но я полагаю, вы ссылаетесь на свой собственный $HOME не root. В этом случае вы должны использовать абсолютные пути.

Если я правильно понимаю строку chkconfig , вы говорите системе запускать ваши сценарии на уровнях инициализации со 2 по 5. Поскольку это сценарий высокого уровня, который зависит от загружаемых других модулей и т.д., Его следует запускать только на более поздних уровнях выполнения. Загляните на эту страницу, чтобы узнать больше об уровнях запуска.

Основываясь на man-странице chkconfig , это выглядит так:

sudo chkconfig myscript.sh 35
1

Вы получаете сообщение об ошибке, потому что у вас отсутствуют теги LSB. Для пуриста, ваш скрипт init.d ужасен, потому что он не содержит комментариев о том, чего он пытается достичь, не имеет функций запуска / остановки и, как правило, не ведет себя как скрипт init.d. Однако для ваших целей это не имеет большого значения, если вы не работаете в общей системе. Я бы посоветовал добавить комментарии в каждый сценарий, который вы когда-либо писали о цели, когда она была написана и кем - это просто хорошая практика.

http://wiki.debian.org/LSBInitScripts

Загляните на страницу руководства (http://linux.die.net/man/8/chkconfig), в частности, в этот раздел:

# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
#              higher quality random number generation.

Или строфы в стиле LSB:

### BEGIN INIT INFO
# Provides: foo
# Required-Start: bar
# Defalt-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Foo init script
### END INIT INFO

Которые "лучше". Здесь нет смысла переписывать man-страницу - найдите время, чтобы понять, что должен делать скрипт init.d, прочитав документацию.

Я думаю, что вы хотите что-то вроде:

# chkconfig: 2345 99 1

Вы можете проверить дважды, выполнив /etc/rc2.d/*myscript* чтобы увидеть уровни S и K, для которых он был установлен.

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