Bash скрипт не запускается при загрузке - PullRequest
1 голос
/ 21 марта 2012

Я написал bash-скрипт для запуска тонкого сервера для двух проектов.

#! /bin/sh
cd /path/to/my/project_1
thin -e production -p 3000 --daemonize -s 10 start

Затем поместите его в /etc/init.d/start_thin.Дали ему 755 разрешений.Ран:

sudo update-rc.d  start_thin defaults.

, затем

sudo reboot

Тонкий не запускается.Спасибо.

ОБНОВЛЕНИЕ:

После долгого боя я обнаружил эту ошибку, которая происходит только при запуске тонкого с /etc/init.d/thin:

Запись PID в tmp / pids / thin.3000.pid С помощью адаптера направляющих /path/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.11 / lib / mysql2 / mysql2.so: [BUG] Ошибка сегментации ruby ​​1.8.7 (2010-08-16 patchlevel 302) [i686-linux]

Я полагаютеперь единственная логическая вещь - переключиться на "обычный" гем sql.

ОБНОВЛЕНИЕ 2:

Я нашел этот ресурс , который помог мне раньше, но не можетпомогите.

ОБНОВЛЕНИЕ 3:

Я переустановил RVM с помощью быстрой установки .Теперь, когда запускается скрипт при загрузке, я вижу в журнале, что гем отсутствует: multi_json-1.1.0.Я установил его и вставил в Gemfile.Не помогло.Тем не менее, когда я запускаю скрипт bash вручную - нет проблем.Только при загрузке жалуется на multi_json-1.1.0.

ОБНОВЛЕНИЕ 4:

Только при запуске файл журнала thin содержит:

Я не понимаю, почему он использует1.8 gems, когда у меня установлен ruby ​​1.9.2: -?

>> Writing PID to tmp/pids/thin.3000.pid
>> Using rails adapter
>> Exiting!
/usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/spec_set.rb:87:in `materialize': Could not find multi_json-1.1.0 in any of the sources (Bundler::GemNotFound)
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/spec_set.rb:81:in `map!'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/spec_set.rb:81:in `materialize'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/definition.rb:90:in `specs'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/definition.rb:135:in `specs_for'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/definition.rb:124:in `requested_specs'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/environment.rb:23:in `requested_specs'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/runtime.rb:11:in `setup'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler.rb:107:in `setup'
        from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.15/lib/bundler/setup.rb:17
        from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
        from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from /home/user1/myproj1/config/boot.rb:6
        from /home/user1/myproj1/config/application.rb:1:in `require'
        from /home/user1/myproj1/config/application.rb:1
        from /home/user1/myproj1/config/environment.rb:2:in `require'
        from /home/user1/myproj1/config/environment.rb:2
        from /usr/lib/ruby/1.8/rack/adapter/rails.rb:42:in `require'
        from /usr/lib/ruby/1.8/rack/adapter/rails.rb:42:in `load_application'
        from /usr/lib/ruby/1.8/rack/adapter/rails.rb:23:in `initialize'
        from /usr/lib/ruby/1.8/rack/adapter/loader.rb:36:in `new'
        from /usr/lib/ruby/1.8/rack/adapter/loader.rb:36:in `for'
        from /usr/lib/ruby/1.8/thin/controllers/controller.rb:163:in `load_adapter'
        from /usr/lib/ruby/1.8/thin/controllers/controller.rb:67:in `start'
        from /usr/lib/ruby/1.8/thin/runner.rb:174:in `send'
        from /usr/lib/ruby/1.8/thin/runner.rb:174:in `run_command'
        from /usr/lib/ruby/1.8/thin/runner.rb:140:in `run!'
        from /usr/bin/thin:6

Итак, естественно, я установил multi_json gem, затем установил пакет, и что вы думаете?Та же старая проблема:).

Ответы [ 3 ]

0 голосов
/ 26 марта 2012

Похоже, что тонкое начало довольно запутанно, с интерпретатором ruby ​​1.8.7, но с использованием гемов, скомпилированных для 1.9.2, что звучит как очень плохая идея. Похоже, что RVM не настроен должным образом

Попробуйте сначала загрузить rvm. Если у вас установлен rvm по всему миру, вы можете сделать это с помощью

source /etc/profile.d/rvm.sh

Если нет, измените этот путь, чтобы отразить, где находится установка rvm для пользователя, выполняющего этот сценарий.

Также rvm требует bash, поэтому убедитесь, что ваш shebang /bin/bash, а не /bin/sh (иногда sh это просто символическая ссылка на bash, но вы не должны полагаться на это)

0 голосов
/ 07 апреля 2012

Я нашел ответ здесь .

В начало добавлены следующие строки в мой bash-скрипт:

# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then

  # First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"

elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then

  # Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"

else

  printf "ERROR: An RVM installation was not found.\n"

fi

rvm use 1.9.2

Чтобы убедиться, что все правильно, внутри bash и непосредственно под указанным кодом я использовал

type rvm | head -1

Если вышеприведенный вывод: rvm - это функция, то все в порядке.

ПРИМЕЧАНИЕ. То же самое должно быть в файлах cron, если по какой-то причине они не работают с RVM.

0 голосов
/ 24 марта 2012

Попробуйте sudo chmod u+x /etc/init.d/start_thin

...