2017-09-04 86 views
1

我與我爲一個網站設立的工人有問題。這裏是應用程序的一些背景: 它運行在rails 3.0.2上,使用mongodb,redis gem 2.2.2。爲了保持工人的正常運轉,我設立了神靈寶石,並規定6名工人應該在生產環境中工作。我將粘貼下面的resque.god.rb文件。另外,還有一個獨立的Ubuntu服務器,它只爲resque-workers和elasticsearch服務設置,所以它不共享任何其他服務。Resque workers still silenceying sileying

我的問題是,出於任何原因,工作人員不斷死亡,只是在日誌/ resque-worker.log文件中記錄「*** Exiting ...」,這是非常煩人的,因爲我不知道什麼是繼續。它不記錄在系統日誌文件,也不dmesg的

什麼這是一塊什麼,我的日誌(對我來說沒有什麼幫助)

*** Starting worker workers:19166:* 
*** Starting worker workers:19133:* 
*** Running before_first_fork hook 
*** Exiting... 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config. 
(in /data/www/tap-production/releases/20170904162514) 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require': iconv will be deprecated in the future, use String#encode instead. 
*** Running before_first_fork hook 
*** Exiting... 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config. 
(in /data/www/tap-production/releases/20170904162514) 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require': iconv will be deprecated in the future, use String#encode instead. 
*** Starting worker workers:19251:* 
*** Starting worker workers:19217:* 
*** Running before_first_fork hook 
*** Exiting... 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config. 
(in /data/www/tap-production/releases/20170904162514) 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require': iconv will be deprecated in the future, use String#encode instead. 
*** Running before_first_fork hook 
*** Exiting... 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config. 
(in /data/www/tap-production/releases/20170904162514) 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require': iconv will be deprecated in the future, use String#encode instead. 
*** Starting worker workers:19330:* 
*** Starting worker workers:19297:* 
*** Running before_first_fork hook 
*** Exiting... 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: Use RbConfig instead of obsolete and deprecated Config. 
(in /data/www/tap-production/releases/20170904162514) 
/usr/local/www/tap-production/shared/bundle/ruby/1.9.1/gems/activesupport-3.0.20/lib/active_support/dependencies.rb:242:in `block in require': iconv will be deprecated in the future, use String#encode instead. 

這裏是我的resque.god.rb代碼得到:

require 'tlsmail' 
rails_env = ENV['RAILS_ENV'] 
rails_root = ENV['RAILS_ROOT'] 
rake_root = ENV['RAKE_ROOT'] 
num_workers = rails_env == 'production' ? 6 : 1 
# Change cache to my_killer_worker_job if you are testing in development. remember to enable it on config/resque_schedule.yml - Fabian 
queue = rails_env == 'production' ? '*' : 'my_killer_worker_job' 

God::Contacts::Email.defaults do |d| 
    Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE) 
    if rails_env == "production" 
    #Change this settings for your own purposes 
    d.from_name = "#{rails_env.upcase}: Process monitoring" 
    d.delivery_method = :smtp 
    d.server_host = 'smtp.gmail.com' 
    d.server_port = 587 
    d.server_auth = :login 
    d.server_domain = 'gmail.com' 
    d.server_user = '[email protected]' 
    d.server_password = 'XXXX' 
    end 
end 



God.contact(:email) do |c| 
    c.name = 'engineering' 
    c.group = 'developers' 
    c.to_email = '[email protected]' 
end 

num_workers.times do |num| 
    God.watch do |w| 
    w.name   = "resque-#{num}" 
    w.group   = 'resque' 
    w.interval  = 30.seconds 
    w.env   = { 'RAILS_ENV' => rails_env, 'QUEUE' => queue, 'VERBOSE' => '1' } 
    w.dir   = rails_root 
    w.start   = "bundle exeC#{rake_root}/rake resque:work" 
    w.start_grace = 10.seconds 
    w.log   = File.join(rails_root, 'log', 'resque-worker.log') 

    # restart if memory gets too high 
    w.transition(:up, :restart) do |on| 
     on.condition(:memory_usage) do |c| 
     c.above = 200.megabytes 
     c.times = 2 
     # c.notify = 'engineering' 
     end 
    end 

    # determine the state on startup 
    w.transition(:init, { true => :up, false => :start }) do |on| 
     on.condition(:process_running) do |c| 
     c.running = true 
     # c.notify = 'engineering' 
     end 
    end 

    # determine when process has finished starting 
    w.transition([:start, :restart], :up) do |on| 
     on.condition(:process_running) do |c| 
     c.running = true 
     c.interval = 5.seconds 
     # c.notify = 'engineering' 
     end 

     # failsafe 
     on.condition(:tries) do |c| 
     c.times = 5 
     c.transition = :start 
     c.interval = 5.seconds 
     # c.notify = 'engineering' 
     end 
    end 

    # start if process is not running 
    w.transition(:up, :start) do |on| 
     on.condition(:process_running) do |c| 
     c.running = false 
     c.notify = {:contacts => ['engineering'], :priority => 1, :category => "workers"} 
     end 
    end 


    end 
end 

請讓我知道您的想法。

+0

您是否嘗試過在任務的不同位置輸出一些文本以查看它是否被執行過?此外,這是否僅在生產中發生? – MrYoshiji

+0

是的,它被執行是因爲我可以看到工人不時地運行不同的工作。是的,它只發生在生產中。 – fabianraf

回答

0

看起來像我到了問題的底部。在我的路由文件中,爲了加載一些動態路由,我添加了一個對方法的調用,看起來像resque不喜歡它,並且只是在不說任何事情的情況下繼續殺死進程(仍然非常奇怪)。然而,在刪除該行(DynamicRouter.load)後,工作人員停止了瘋狂行爲。我希望這可以幫助別人,我會很樂意提供我能找到的更多細節。