瘦启动每个服务器两个ruby进程,杀死错误的进程

时间:2012-04-25 10:49:25

标签: ruby bundler daemon thin

我正在使用bundle exec thin start -C /etc/thin/staging.yml

启动三个精简流程

我使用rvm,ruby版本是ree-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将显示三个ruby进程侦听端口3040-3042,但pid文件包含三个不同(略低)的pid。所有六个流程都称为merb : merb : Master

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

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

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

我的问题是:

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

1 个答案:

答案 0 :(得分:0)

显然,Merb引导程序会执行分支。脑死亡是怎么回事!

Merb::Config[:fork_for_class_load] = false

中设置config.ru