Абсолютно новичок в cronjobs и тому подобное, никогда не делал этого раньше, так что теперь я попытался испачкать руки, используя всякий раз, как плагин, увидев его на RailsCasts.Поэтому я пытаюсь запустить задание cron для моего приложения Ruby, но кажется, что оно не работает, возможно, из-за кода или из-за того, что я использую Windows 7?
Вот код из моей модели сервера
def self.ping
Server.all.each do |t|
if t.name.serverUp?
@response = 'Up'
else
@response = 'Down'
end
self.update_attribute(:serverStatus, @response.to_s)
end
end
def serverUp?
if system 'ping '+name.to_s+' -n 1 > nul'
@response = 'Up'
else
@response = 'Down'
end
self.update_attribute(:serverStatus, @response.to_s)
@response
end
А вот код из моего файла schedule.rb с заданием cron
#every 2.minutes do
# runner "Server.last.name = 'Works'"
# runner "for x in Server.all.each {x.serverUp?}", environment =>"development"
#end
every 2.minutes do
runner "Server.ping", environment =>"development"
end
Я опробовал оба метода (последний, который я использовал совсем недавно,к которому я создал метод self.ping
в модели сервера.
Поэтому, когда я запускаю whenever
в моем каталоге rails, я получаю следующий вывод:
PS C:\SIS> whenever
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /bin/bash -l -c 'cd C:/SIS
&& script/rails runner -e production '\''Server.ping'\'''
## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated.
## [message] Run `whenever --help' for more options.
1st)Как ни странно, среда, похоже, не перешла в разработку, хотя я и указал это в коде.2-й) Файл crontab не был обновлен (я даже не знаю, существовал ли он с самого начала?)
Поэтому я пытался создать crontab всякий раз, когда файл запускал whenever -w ping
, но результаты были
PS C:\SIS> whenever -w ping
[fail] Couldn't write crontab; try running `whenever' with no options to ensure your schedule file is valid.
Так что это моя проблема, любая помощь будет признательна.
Редактировать: Хорошо, я решил использовать rufus-планировщик для обновления моего серверасписок часто.Я проверил, будет ли он работать для создания нового сервера в таблицу каждые несколько минут, и это, похоже, сработало.Однако, поскольку я не смог остановить создание серверов, я удалил его из комплекта, удалил файл 'task_scheduler', а затем переустановил и сделал все как раньше.Однако, когда я сейчас пытаюсь запустить сервер, я получаю следующую ошибку:
C:/SIS/config/initializers/task_scheduler.rb:1:in '<top (required)>': undefined method 'start_new' for Rufus::Scheduler:
Module (NoMethodError)
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:235:in 'load'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:235:in 'block in load'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in 'block in load_dependency'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:596:in 'new_constants_in'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in 'load_dependency'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:235:in 'load'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/engine.rb:201:in 'block (2 levels) in <class:Engine>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/engine.rb:200:in 'each'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/engine.rb:200:in 'block in <class:Engine>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:25:in 'instance_exec'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:25:in 'run'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:50:in 'block in run_initializers'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:49:in 'each'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/initializable.rb:49:in 'run_initializers'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/application.rb:134:in 'initialize!'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/application.rb:77:in 'method_missing'
from C:/SIS/config/environment.rb:5:in '<top (required)>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in 'require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in 'block in require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in 'block in load_dependency'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:596:in 'new_constants_in'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in 'load_dependency'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in 'require'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/application.rb:103:in 'require_environment!'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/commands.rb:22:in '<top (required)>'
from script/rails:6:in 'require'
from script/rails:6:in '<main>'
Код в task_scheduler выглядит следующим образом:
scheduler = Rufus::Scheduler.start_new
scheduler.every '1m' do
# Server.all.each do
# |server| server.name.serverUp?
# end
Server.ping
end
Не уверен, какой из двухметоды, чтобы использовать, поэтому я закомментировал первый.Помощь будет принята с благодарностью.Заранее спасибо
Редактировать Хорошо, наконец-то решил, пришлось поставить require 'rubygems'
require 'rufus/scheduler'
поверх моего кода.Теперь все отлично работает: -)