Рецепт шеф-повара: демон Upstart не начинается с Ruby - PullRequest
3 голосов
/ 29 октября 2011

Я бы хотел запустить скрипт ruby ​​mongrel в качестве последнего шага моей системы инициализации (CHEF). Поэтому я написал выскочка .conf файл со следующими записями:

#!upstart
description "mongrel server"
author      "daniele"

start on startup
stop on shutdown

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
expect fork

# Run before process
pre-start script
end script

# Start the process
script
   cd /vagrant/trunk
   /bin/sh /vagrant/trunk/script/server -p 3000 >> /home/vagrant/log.txt
end script

Однако файл log.txt пуст и работает netstat -an | grep 3000 ничего не показывает. Я думал, что скрипт не был исполняемым, но запуск chmod ничего не изменил.

Однако, если я выполню скрипт вручную, я смогу запустить сервер

vagrant@ubuntu10:/vagrant/trunk$ ./script/server 
=> Booting Mongrel
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
/usr/local/rvm/gems/ruby-1.8.7-p352/gems/rails-2.3.4/lib/rails/gem_dependency.rb:119:Warning:Gem::Dependency#version_requirements is deprecated and will be removed on or after August 2010.  Use #requirement
=> Call with -d to detach
=> Ctrl-C to shutdown server

содержание скрипта:

#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/server'

Я работаю на Vagrant с RVM и Ruby 1.8.7, Rubygems 1.3.7. Рецепт начальной загрузки:

[...]
template "mongrel.upstart.conf" do
   path "/etc/init/mongrel.conf"
   source "mongrel.upstart.conf.erb"
   mode 0644
   owner "root"
   group "root"
end

service "mongrel" do
   provider Chef::Provider::Service::Upstart
   supports :restart => true, :start => true, :stop => true
   action [:enable, :start]
end

Есть идеи? Спасибо

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Проблема в том, что ваша конфигурация Upstart запускается до того, как Vagrant завершит настройку общей папки, в которую монтируется ваш код.Когда вы запустите его вручную из командной строки, позже он уже будет смонтирован.

Я не уверен, каково решение - если бы вы могли подключиться к процессу загрузки, где это происходит, вы могли бы выдатьсобытие, такое как:

initctl emit vagrant-mounted

, которое ваша конфигурация Upstart может ожидать на

start on vagrant-mounted
0 голосов
/ 09 июля 2013

По крайней мере, в Ubuntu 12.04 вы можете дождаться «смонтированного» сигнала, генерируемого заданием mountall.

start on mounted

Вышеуказанный раздел должен работать с общими папками Vagrant.

0 голосов
/ 26 октября 2012

Я решил похожую проблему, добавив

sleep 10

в скрипт.Как это:

...
# Start the process
script
    sleep 10
    cd /vagrant/trunk
    /bin/sh /vagrant/trunk/script/server -p 3000 >> /home/vagrant/log.txt
end script
....
...