Назад | Перейти на главную страницу

сценарий 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  

попробуйте добавить

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

Отсутствие ошибок в журнале не является явным признаком того, что сценарий инициализации работает. Отладить это можно двумя простыми шагами.

  1. Добавьте некоторые детали отладки внутри скрипта. Мне нравится записывать номер строки в файл журнала с разных точек сценария. Нет выхода? Тогда это почти наверняка не запускается.
  2. Убедитесь, что сценарий действительно включен для запуска, когда вы думаете, что это так, как уже заявили некоторые другие. Если он не запускается, это может быть причиной отсутствия сообщений об ошибках в журналах.

вам также может потребоваться поместить ссылку в одну из папок / etc / rcX (в зависимости от предполагаемого уровня запуска) и запустить

sudo run update-rc.d SkriptnameWithinInitDWithoutPath по умолчанию