Ruby Daemon и Bluepill мониторинг - PullRequest
2 голосов
/ 13 июля 2011

Я пытаюсь создать пользовательский демон, который будет запускаться каждые 60 секунд, запускать / останавливать и отслеживать его с помощью bluepill.

Может кто-нибудь показать мне, как это сделать проще, или, пожалуйста, не могли бы вы сказать мне, что я делаю неправильно?

В настоящее время bluepill запускает демон так, что он запускается, но, похоже, затем не знает, как он работает, продолжая пытаться остановить и запустить его.

Вот мой код из моего файла .pill

app.process("get_dropboxes") do |process|

   process.working_dir = RAILS_ROOT
   process.pid_file = File.join(RAILS_ROOT, "tmp", "pids", "get_dropbox.pid")  
   process.start_command = "/usr/bin/env RAILS_ENV=#{RAILS_ENV} bundle exec lib/daemons/get_dropbox_ctl start"
   process.stop_command = "/usr/bin/env RAILS_ENV=#{RAILS_ENV} bundle exec lib/daemons/get_dropbox_ctl stop"

   process.start_grace_time = 10.seconds
   process.stop_grace_time = 10.seconds
   process.restart_grace_time = 10.seconds

   process.checks :cpu_usage, :every => 30.seconds, :below => 20, :times => [3,5]
   process.checks :mem_usage, :every => 30.seconds, :below => 350.megabytes, :times => [3,5]

 end

вот мой файл get_dropbox_ctl

#!/usr/bin/env ruby
require 'rubygems'
require "daemons"
require 'yaml'
require 'erb'

gem 'activesupport', '>=3.0.0'
require 'active_support'

# For some reason, ActiveSupport 3.0.0 doesn't load.
# Load needed extension directly for now.
require "active_support/core_ext/object"
require "active_support/core_ext/hash"

options = YAML.load(
  ERB.new(
    IO.read(
      File.dirname(__FILE__) + "/../../config/daemons.yml"
  )).result).with_indifferent_access

options[:dir_mode] = options[:dir_mode].to_sym

Daemons.run File.dirname(__FILE__) + "/get_dropbox.rb", options

А вот и мой файл get_dropbox.rb

#!/usr/bin/env ruby

# You might want to change this
ENV["RAILS_ENV"] ||= "production"

require 'net/pop'
require File.dirname(__FILE__) + "/../../config/application"
Rails.application.require_environment!

$running = true
Signal.trap("TERM") do 
  $running = false
end

while($running) do


  # do stuff .......

  sleep 60
end

Логи, которые я получаю

[2011-07-13T16:55:00.464202 #32257]  WARN -- : [domain.com:get_dropboxes] pid_file /var/www/domain.com/current/tmp/pids/get_dropbox.pid does not exist or cannot be read
W, [2011-07-13T16:55:00.464315 #32257]  WARN -- : [domain.com:get_dropboxes] pid_file /var/www/domain.com/current/tmp/pids/get_dropbox.pid does not exist or cannot be read
W, [2011-07-13T16:55:00.464505 #32257]  WARN -- : [domain.com:get_dropboxes] Executing start command: /usr/bin/env RAILS_ENV=production bundle exec lib/daemons/get_dropbox_ctl start
I, [2011-07-13T16:55:01.602210 #32257]  INFO -- : [domain.com:get_dropboxes] Going from down => starting

Конечно, есть более простой способ, чем этот?

1 Ответ

0 голосов
/ 15 июля 2011

Я не уверен, что это то, что вы ищете, но, насколько я знаю, вы можете пропустить файл демона и использовать bluepill для этого. Пока вы указываете pid-файл, вы можете установить process.daemonize = true, и он создаст для вас демон.

...