【问题标题】:Chef recipe: Upstart daemon not starting with Ruby厨师食谱:不以 Ruby 开头的 Upstart 守护进程
【发布时间】:2011-12-17 19:20:51
【问题描述】:

我想运行一个 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'

我使用 RVM 和 Ruby 1.8.7、Rubygems 1.3.7 在 Vagrant 上运行。引导程序是:

[...]
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

有什么想法吗? 谢谢

【问题讨论】:

    标签: ruby mongrel chef-infra vagrant upstart


    【解决方案1】:

    问题是你的 Upstart 配置在 Vagrant 完成安装你的代码的共享文件夹设置之前运行。当您稍后从命令行手动运行它时,它已经被挂载了。

    我不确定解决方案是什么——如果您可以连接到发生这种情况的引导过程,您可以发出一个事件,例如:

    initctl emit vagrant-mounted
    

    您的 Upstart 配置可以等待

    start on vagrant-mounted
    

    【讨论】:

      【解决方案2】:

      我通过添加解决了类似的问题

      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
      ....
      

      【讨论】:

        【解决方案3】:

        至少在 Ubuntu 12.04 中,您可以等待 mountall 作业发出的“已安装”信号。

        start on mounted
        

        上面的节应该适用于 Vagrant 共享文件夹。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          相关资源
          最近更新 更多