2012-04-25 71 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