Я разрабатываю страницу состояния, где мне нужно показать, запущено ли задание с задержкой. Пожалуйста, помогите мне найти способ в коде.
Использую Rails 3.0.20, ruby 1.8.7 (2011-06-30 patchlevel 352), и delayed_job 3.0.4
Я разрабатываю страницу состояния, где мне нужно показать, запущено ли задание с задержкой. Пожалуйста, помогите мне найти способ в коде.
Использую Rails 3.0.20, ruby 1.8.7 (2011-06-30 patchlevel 352), и delayed_job 3.0.4
С Rails 5.x вы можете зайти на свой сервер по ssh, перейти в папку /current в вашем приложении и запустить:
RAILS_ENV=production bin/delayed_job status
Вы можете использовать RAILS_ENV = production script/delayed_job статус, если вы проверяете производственный режим
В настоящее время лучшим способом, который я могу придумать для обеспечения delayed_job daemon
всегда, является добавление initializer
в наше приложение Rails, которое проверяет, работает ли демон. Если он не работает, то initializer
запускает daemon
, в противном случае он просто оставляет его.
Теперь возникает вопрос, как мы обнаруживаем, что delayed_job daemon
выполняется изнутри script?
Простой способ -
Проверьте наличие демонов PID file
(File.exist?...). Если он там, то предположим, что он запускает еще запустить его.
Самый простой способ проверить, работает ли delayed_job или нет, - это проверить в поле locked_by
.
Это поле будет содержать рабочий или процесс блокировки/обработки задания.
Запуск Delayed::Job.where('locked_by is not null')
даст вам некоторые результаты, если выполняются задания.
Кроме того, вы можете выполнить часовую задачу, выполнив этот запрос, чтобы проверить статус.
Надеюсь, что это поможет.
Чтобы проверить статус задания и т.д., вы можете использовать delayed_job_web gem, который забирает все заданные в очереди задания. И чтобы убедиться, что он все время устанавливает monit. Вот railscast. Здесь больше информации о том, как настроить monit для delayed_job
#!/usr/bin/env ruby
pid = ARGV[0].to_i
begin
Process.kill(0, pid)
puts "#{pid} is running"
rescue Errno::EPERM # changed uid
puts "No permission to query #{pid}!";
rescue Errno::ESRCH
puts "#{pid} is NOT running."; # or zombied
rescue
puts "Unable to determine status for #{pid} : #{$!}"
end
Проверить Как определить, работает ли другой идентификатор процесса с помощью Java или JRuby в Linux?