2012-04-25 37 views
0

我开始了bundle exec thin start -C /etc/thin/staging.yml薄每台服务器启动两个红宝石进程,杀死错一个

我用RVM三点细的过程,红宝石版本是稀土元素-1.8.7的/etc/thin/staging.yml

内容:

---                
timeout: 30              
pid: /home/myuser/apps/g/shared/pids/thin.pid   
max_persistent_conns: 512          
servers: 3              
chdir: /home/myuser/apps/g/current      
port: 3040              
require: []              

log: /home/myuser/apps/g/shared/log/thin.log    
daemonize: true             
address: 0.0.0.0             
max_conns: 1024             
wait: 30               
environment: staging            

lsof -i :3040-3042将显示在端口3040-3042上侦听的三个ruby进程,但是pid文件包含三个不同的(略低)pid。所有这六个进程都被调用merb : merb : Master

当我用bundle exec thin stop -C /etc/thin/staging.yml停止稀释时,瘦首先向PID文件中的进程发送QUIT信号,然后在超时后发出KILL信号。

pid文件现在不见了,瘦日志显示服务器已停止,但仍有三个ruby进程在端口3040-3042上侦听,因此随后的thin start将失败。

两个进程的输出lsof -p之间的唯一区别是/lib/libnss_files-2.12.so库和postgres套接字。

我的问题是:

  • 为什么我在thin stop得到超时?
  • 为什么每个服务器有两个进程而不是一个?
  • 我该如何解决这个问题优雅(不杀-9)

回答

0

显然,Merb的引导程序调用fork。 braindead是如何的!

在您的config.ru中设置Merb::Config[:fork_for_class_load] = false