2016-05-09 3 views
2

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

every 2.seconds do 
    rake "my:rake:task" 
end 

Я получаю эту ошибку

`parse_time': Time must be in minutes or higher (ArgumentError) 

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

+0

Что делает ваши реки задача? – Stefan

+0

отправляет два запроса стороннему API –

ответ

4

Вы не можете сделать это с помощью драгоценного камня whenever.

Под капотом жемчужина whenever просто создает cron job. Они могут быть сконфигурированы только с минимальной степенью детализации за минута.

То, что вы могло бы, вместо этого записывает сценарий оболочки с бесконечным циклом, который запускает вашу задачу, а затем спит в течение 2 секунд. Тем не менее, я бы посоветовал это сделать - что-то такое часто не так. Вероятно, существует гораздо более чистый подход, например. запуск вашего кода как крюка after_save?

1

Вы получили ошибку, потому что this является причиной

Cron позволяет только в течение как минимум одной минуты. Что вы можете сделать, это написать сценарий оболочки с бесконечным циклом, который запускает вашу задачу, а затем спит в течение 2 секунд. Таким образом, ваша задача будет выполняться более или менее каждые 2 секунды, в зависимости от того, сколько времени занимает сама задача.

Это действительно звучит как вы делаете что-то, что вы, вероятно, не следует делать хотя

как петлей

while true ; do cd /home/myrailsapp && rake my:rake:task & ; sleep 2; done 

Или conrtab будет выглядеть как этот

и в /home/myrailsapp/rakescript.sh

cd /home/myrailsapp && rake my:rake:task 

in corntab

* * * * * /home/myrailsapp/rakescript.sh 
* * * * * sleep 2; /home/myrailsapp/rakescript.sh 
* * * * * sleep 4; /home/myrailsapp/rakescript.sh 
* * * * * sleep 6; /home/myrailsapp/rakescript.sh 
+1

Это должен быть комментарий к другому ответу. – sawa

0

петля с рельсами бегуном работает отлично:

loop { 
    Ball.update_all_positions 
    sleep 2 
} 
Смежные вопросы