У меня есть команда, которая работает нормально, если я выполнил ее из командной строки ... но когда я помещаю ее в сценарий 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
попробуйте добавить
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
в начало сценария инициализации.
Я использую следующий сценарий 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
Я повторю призыв Камила к выходу при запуске.
Кроме того, вы пробовали chkconfig --add bluepill
и chkconfig bluepill on
.
В противном случае я уверен, что это какая-то переменная окружения в скрипте. Попробуйте сначала найти среду через . /etc/profile
или т.п. Тем более, что похоже, что он установлен в / usr / local / bin. Может потребоваться правильная установка PATH или LD_LIBRARY_PATH.
ок .. тупой вопрос, а вы установили запуск скрипта при загрузке? Я больше знаком с дистрибутивами в стиле Debian, но вам могут подойти ntsysv или chkconfig.
Еще один тупой вопрос, загружается ли bluepill в память после запуска скрипта? ps -ef | grep bluepill
Отсутствие ошибок в журнале не является явным признаком того, что сценарий инициализации работает. Отладить это можно двумя простыми шагами.
вам также может потребоваться поместить ссылку в одну из папок / etc / rcX (в зависимости от предполагаемого уровня запуска) и запустить
sudo run update-rc.d SkriptnameWithinInitDWithoutPath по умолчанию