Рецепт шеф-повара: демон Upstart не запускается с Ruby

Я хотел бы запустить сценарий ruby ​​mongrel в качестве последнего шага моей системы подготовки (CHEF). Поэтому я написал upstart файл .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

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


person danielepolencic    schedule 29.10.2011    source источник


Ответы (3)


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

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

initctl emit vagrant-mounted

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

start on vagrant-mounted
person Paul Smith    schedule 30.11.2011

Я как бы решил аналогичную проблему, добавив

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
....
person jamting    schedule 26.10.2012

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

start on mounted

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

person Arnau Siches    schedule 09.07.2013