Отсутствует файл PID при использовании диспетчера процессов для запуска отложенного задания - PullRequest
6 голосов
/ 27 сентября 2010

Я использую BluePill для управления такими процессами, как отложенное задание для Rails. В журнале BluePill я получаю это сообщение:

W, [2010-09-27T01:23:20.447053 #19441]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-09-27T01:23:20.447368 #19441]  WARN -- : [fsg_distro:delayed_job] Executing start command: ruby script/delayed_job -e production start
I, [2010-09-27T01:23:20.469165 #19441]  INFO -- : [fsg_distro:delayed_job] Going from down => starting

Итак, он утверждает, что pid-файл отсутствует, но не должен ли этот pid быть создан, когда BluePill запускает процесс отложенного задания?

Обновление Чтобы быть немного яснее об этой ошибке, я могу успешно запустить команду вручную, но Bluepill не может запустить команду запуска. Когда я запускаю его вручную, это выглядит так:

rails@george:/srv/fsg_distro/current$ /usr/bin/env RAILS_ENV=production /usr/bin/ruby /srv/fsg_distro/current/script/delayed_job start
delayed_job: process with pid 17564 started. 

Когда я запускаю его с Bluepill, это выглядит так:

W, [2010-10-03T21:24:13.943136 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:13.943391 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
I, [2010-10-03T21:24:13.943811 #17326]  INFO -- : [fsg_distro:delayed_job] Going from starting => down
W, [2010-10-03T21:24:14.945274 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:14.945495 #17326]  WARN -- : [fsg_distro:delayed_job] pid_file /srv/fsg_distro/shared/pids/delayed_job.pid does not exist or cannot be read
W, [2010-10-03T21:24:14.945826 #17326]  WARN -- : [fsg_distro:delayed_job] Executing start command: /usr/bin/env RAILS_ENV=production /usr/bin/ruby /srv/fsg_distro/current/script/delayed_job start
W, [2010-10-03T21:24:15.049261 #17326]  WARN -- : [fsg_distro:delayed_job] Start command execution returned non-zero exit code:
W, [2010-10-03T21:24:15.049491 #17326]  WARN -- : [fsg_distro:delayed_job] {:stderr=>"", :exit_code=>1, :stdout=>""} 
I, [2010-10-03T21:24:15.049947 #17326]  INFO -- : [fsg_distro:delayed_job] Going from down => starting 

Моя таблетка выглядит так:

APP_ROOT='/srv/fsg_distro'
RAILS_ROOT='/srv/fsg_distro/current'
RAILS_ENV='production'
RUBY_EXEC='/usr/bin/ruby'

Bluepill.application("fsg_distro", :log_file => "/srv/fsg_distro/shared/log/bluepill.log") do |app|
  app.process("delayed_job") do |process|
    process.working_dir = RAILS_ROOT

    process.start_grace_time    = 30.seconds
    process.stop_grace_time     = 30.seconds
    process.restart_grace_time  = 30.seconds

    process.start_command = "/usr/bin/env RAILS_ENV=#{RAILS_ENV} #{RUBY_EXEC} #{RAILS_ROOT}/script/delayed_job start"
    process.stop_command  = "/usr/bin/env RAILS_ENV=#{RAILS_ENV} #{RUBY_EXEC} #{RAILS_ROOT}/script/delayed_job stop"

    process.pid_file = "#{APP_ROOT}/shared/pids/delayed_job.pid"
    process.uid = "deploy"
    process.gid = "deploy"
  end
end 

А мой скрипт отложенной работы выглядит так:

#!/usr/bin/env ruby
ENV['RAILS_ENV'] ||= 'production'

require File.dirname(__FILE__) + '/../config/environment'
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize 

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Если вы демонизируете delayed_job (которым вы являетесь), то вы должны сгенерировать файл pid для себя или получить delayed_job, чтобы сделать это за вас, тогда bluepill ожидает найти файл pid один раз grace_start_timeпрошло.

Если вы запустите delayed_job на переднем плане и попросите bluepill демонизировать процесс для вас, то bluepill сгенерирует файл pid.

Вы не можете контролировать себя-Demonizing процесс и BluePill создать файл PID.Это либо один, либо другой.

1 голос
/ 25 октября 2010

У меня нет ответа, но точно такой же вопрос.Я перепробовал множество решений, включая создание сценария запуска для init.d и вызов его из bluepill, как описано в другом сообщении на основе мониторинга (/1072250/kak-otslezhivat-delayedjob-s-pomoschy-monit),, но ничего не помогло. Всегда существует проблема с разрешениями для файла PID.Как это может быть при запуске с правами su?

Я владею кодом и делюсь им с группой www. Нужно ли создавать пользовательского пользователя только для запуска bluepill? Если да, то с какими настройками?

...