Запускается всякий раз, когда cron в Windows

Абсолютно новичок в 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.

1-й) Как ни странно, среда, похоже, не изменилась в процессе разработки, хотя я указал это в коде. 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-scheduler для частого обновления списка серверов. Я проверил, сработает ли каждый раз создавать новый сервер в таблице, и это, похоже, сработало. Однако, поскольку мне не удалось остановить создание серверов, я удалил его из пакета, удалил файл 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' в начало кода. Теперь отлично работает :-)


person omarArroum    schedule 15.08.2011    source источник
comment
Для запуска cron в Windows с использованием cygwin это может быть использовать для вас.   -  person Zabba    schedule 17.10.2011


Ответы (4)


Хотя он далеко не такой гибкий, как cron, в Windows есть команда AT, которая может решить ваши проблемы, однако вы можете запланировать ее запуск не чаще одного раза в день. Чтобы узнать, как использовать AT, запустите AT /? в командной строке.

Для более детального контроля над запущенными задачами вы можете использовать планировщик задач Windows на основе графического интерфейса. вы можете найти это в Панель управления -> Система и безопасность -> Администрирование -> Планировщик задач

person Chris Bailey    schedule 15.08.2011

Cron - это программа для Unix. Его не существует в Windows.

person Jörg W Mittag    schedule 15.08.2011
comment
Итак, что мне делать, чтобы настраивать задания cron в Windows, используя каждый раз? - person omarArroum; 15.08.2011
comment
@teenOmar: В Windows нет cron. Период. - person Jörg W Mittag; 15.08.2011

У меня была такая же проблема, вот как я ее решил:

Я создал небольшой EXE в AutoIT, exe будет читать имена файлов / URL-адресов для выполнения из файла ini (config.ini)

Я назвал EXE CRON.exe и запустил его через запланированные задачи.

Файлы / URL-адреса в config.ini могут быть другими исполняемыми файлами или URL-адресами, сценарий определит, как запускать каждый тип.

AutoIT - очень простой язык сценариев, вы можете увидеть мой код CRON.exe ниже:

$iniFile='config.ini'

$i=0
While 1 
    $i+=1
    $file=IniRead($iniFile, 'crons', $i, 'NULL')
    If $file='NULL' Then ExitLoop

    If StringInStr($file, 'http://') Then
        InetGet($file, @TempDir, 1)
    Else
        $wd=StringSplit($file, '\', 3)
        $workingDir=''
        For $i=0 To UBound($wd)-2
            $workingDir&=$wd[$i]&'\'
        Next
        RunWait($file, $workingDir)
    EndIf
WEnd

Пример ini файла:

[CRONS]
;paths of the files to execute
1=C:\anotherEXE.exe
2=http://mySite.com/myCron.php

Все файлы выполняются по порядку без перекрытия, вы можете при желании изменить код AutoIT, чтобы использовать Run вместо RunWait, если вы хотите выполнять все файлы одновременно.

person Drahcir    schedule 17.10.2011
comment
Это кажется довольно сложным: p Я решил эту проблему, используя гем rufus-scheduler, он выполняет всю работу за меня :). Хотя спасибо за ответ d (•. •) b - person omarArroum; 18.10.2011

Да, я согласен с Jorg M, задание cron - это программа unix, а также планировщик rufus внутренне вызывает процесс cron unix, поэтому держитесь подальше от обоих, и вы должны использовать отложенное задание ActiveRecord, которое поможет вам сделать то же самое.

Это согласно моему опыту, может быть и другой способ, но это лучший из тех, что я когда-либо использовал.

Удачи

person Rameshwar Vyevhare    schedule 23.05.2014