Сценарий init.d не работает.... но команда работает, если я выполняю ее в консоли
У меня есть команда, которая работает нормально, если я выполнил ее из командной строки... но когда я помещаю ее в сценарий init.d, она не запускается (ну.. она запускается, но ведет себя иначе, чем при запуске) напрямую).
Любая идея, почему это не работает на сценарии инициализации?
Команда: bluepill load /var/www/html/bluepill.conf
И скрипт init.d это:
#!/bin/sh
## Based on http://www.novell.com/coolsolutions/feature/15380.html
# chkconfig: 345 99 1
# processname: solr
# Provides: bluepill
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: bluepill daemon, providing process monitoring
# Description: Bluepill
# Check for missing binaries
BLUEPILL_BIN=/usr/local/bin/bluepill
test -x $BLUEPILL_BIN || { echo "$BLUEPILL_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Check for existence of needed config file and read it
BLUEPILL_CONFIG=/var/www/html/bluepill.conf
test -r $BLUEPILL_CONFIG || { echo "$BLUEPILL_CONFIG not existing";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
case "$1" in
start)
echo -n "Starting bluepill "
$BLUEPILL_BIN load $BLUEPILL_CONFIG
;;
stop)
echo -n "Shutting down bluepill "
$BLUEPILL_BIN quit
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
;;
*)
## If no parameters are given, print which are avaiable.
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
Обновление (чтобы ответить на несколько вопросов):
Я также добавил скрипт, чтобы он выполнялся во время загрузки, используя:
chkconfig --add bluepill_script
chkconfig --level 345 bluepill_script on
7 ответов
Попробуйте добавить
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
в начало сценария инициализации.
Я повторю призыв Камиля к выводу при запуске.
Кроме того, вы пытались chkconfig --add bluepill
а также chkconfig bluepill on
,
В противном случае, держу пари, это какая-то переменная окружения в скрипте. Попробуйте найти среду в начале через . /etc/profile
или т.п. Тем более, что, похоже, он установлен в /usr/local/bin. Может потребоваться, чтобы PATH или LD_LIBRARY_PATH были установлены правильно.
Я использую следующий скрипт init.d, и у меня возникла похожая проблема, потому что гем bluepill был установлен под установкой rvm. Заметьте, что нужно указывать переменную окружения rvm, но этого можно было бы добиться с помощью источника /etc/profile (поскольку он также там установлен). Я использую рецепт поваренной книги Opscode, чтобы установить их, поэтому эти пути будут переменными, если поваренная книга rvm устанавливает свои драгоценные камни.
#!/bin/bash
#
# Bluepill
#
# chkconfig: - 85 15
# description: start, stop, restart bluepill
#
RETVAL=0
if [[ -s /usr/local/rvm/scripts/rvm ]] ; then source /usr/local/rvm/scripts/rvm ; fi
case "$1" in
start)
for i in /etc/bluepill/*.pill; do
/usr/local/rvm/gems/ruby-1.9.2-p180/bin/bluepill load $i
done
RETVAL=$?
;;
stop)
/usr/local/rvm/gems/ruby-1.9.2-p180/bin/bluepill stop
/usr/local/rvm/gems/ruby-1.9.2-p180/bin/bluepill quit
RETVAL=$?
;;
restart)
/usr/local/rvm/gems/ruby-1.9.2-p180/bin/bluepill restart
RETVAL=$?
;;
status)
/usr/local/rvm/gems/ruby-1.9.2-p180/bin/bluepill status
RETVAL=$?
;;
*)
echo "Usage: bluepill {start|stop|restart|status}"
exit 1
;;
esac
exit $RETVAL
Хорошо .. тупой вопрос, но вы установили скрипт для запуска при загрузке? Я более знаком с дистрибутивами в стиле Debian, но вам могут пригодиться ntsysv или chkconfig.
Вам также может понадобиться поместить ссылку в одну из /etc/rcX-папок (в зависимости от предполагаемого уровня запуска) и запустить
sudo run update-rc.d SkriptnameWithinInitDWithoutPath по умолчанию
Еще один тупой вопрос, загружается ли bluepill в память после запуска скрипта? ps -ef | grep bluepill
Отсутствие ошибок в журнале не является четким признаком того, что скрипт init работает. Два простых шага отладят это.
- Добавьте некоторые детали отладки внутри скрипта. Мне нравится записывать номер строки в файл журнала с разных точек сценария. Нет выхода? Тогда это почти наверняка не запустить.
- Убедитесь, что скрипт действительно запущен, когда вы думаете, что он это сделал, как уже заявили несколько других. Если он не запускается, это может объяснить отсутствие сообщений об ошибках в журналах.