即使重启后我怎样才能保持乘客独立?

我有几个应用程序在ruby 1.9.2上运行rails 3并使用nginx + passenger部署在Ubuntu 10.04 LTS机器上。现在,我需要添加一个在ruby 1.8.7(REE)和Rails 2上运行的新应用程序。我完成了使用RVM,Passenger Standalone和反向代理。 问题是,每次我必须重新启动服务器(例如安装安全更新)时,我必须手动启动Passenger Standalone。 有没有办法自动启动它?我被告知要使用Monit或God,但我无法编写适用于Passenger Standalone的正确配方。我也有上帝和RVM的一些问题,所以如果你有一个不使用上帝的解决方案,或者如果你知道如何正确配置God / Rvm,那就更好了。     
已邀请:
这就是我的工作。使用Upstart(Ubuntu 10.04)启动乘客守护程序 我的环境使用rvm和ruby 1.9.2以及apache和我的rails应用程序通过capistrano部署
# Upstart: /etc/init/service_name.conf
description "start passenger stand-alone"
author "Me <me@myself.am>"

# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn

# When to start the service
start on started mysql

# When to stop the service
stop on runlevel [016]

# 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 /var/path/to/app/staging/current
        sh HOME=/home/deploy /usr/local/rvm/gems/ruby-1.9.2-p136@appname/gems/passenger-3.0.7/bin/passenger start --user 'deploy' -p '5000' -a '127.0.0.1' -e 'production'
end script
和apache配置:
<VirtualHost *:80>
    ServerName myapp.com

    PassengerEnabled off

                <Proxy *>
                        Order deny,allow
                        Allow from all
                </Proxy>

    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/

</VirtualHost>
Upstart没有设置乘客所依赖的ENV ['HOME'],所以我们必须在执行乘客命令时传递它。除此之外它非常直接。 调试说明:https://serverfault.com/questions/114052/logging-a-daemons-output-with-upstart(将类似
>> /tmp/upstart.log 2>&1
的内容添加到脚本块的第二行) 希望这可以帮助。     
我建议编写一个可以成功启动它的shell脚本,然后在Monit或God配方中使用它,如果你仍然愿意使用它们,或者如果没有则使用init脚本。 您没有提到您的服务器运行的操作系统,但如果它是最近的Ubuntu,您可以非常轻松地编写Upstart脚本。它是内置的,具有Monit / God的重要功能 - 即使重启也可以保持守护程序的运行。     
我使用宝石眼 - https://github.com/kostya/eye
BUNDLE = 'bundle'
RAILS_ENV = 'production'
ROOT = File.expand_path(File.dirname(__FILE__))

Eye.config do
  logger "#{ROOT}/log/eye.log"
end

Eye.application :app do
  env 'RAILS_ENV' => RAILS_ENV
  working_dir ROOT
  trigger :flapping, :times => 10, :within => 1.minute

  process :passenger do
    daemonize true
    pid_file "tmp/pids/passenger.pid"

    start_command "#{BUNDLE} exec passenger start --port 3000 --environment #{RAILS_ENV}"
    stop_signals [:TERM, 5.seconds, :KILL]
    restart_command "kill -USR2 {PID}"

    restart_grace 10.seconds 

    check :cpu, :every => 30, :below => 80, :times => 3
    check :memory, :every => 30, :below => 70.megabytes, :times => [3,5]
  end

  process :delayed_job do
    pid_file "tmp/pids/delayed_job.pid"
    stdall "log/delayed_job.log"
    daemonize true
    stop_signals [:INT, 30.seconds, :TERM, 10.seconds, :KILL]
    restart_grace 10.seconds

    start_command "#{BUNDLE} exec rake jobs:work"
  end
end
    
根据您的平台,您几乎肯定会有一些init可用的变体。在debian上,这是init.d.在ubuntu,init.d或upstart上。在类似RHEL的服务上。这些将允许您在启动时管理服务。我建议您阅读适用于您平台的相应手册页。     

要回复问题请先登录注册