2016-05-09 5 views
2

ich, wenn gem für meine Backend crons Arbeitsplätze umgesetzt haben, die gut funktioniert, wenn ich so etwas wie, wenn gem funktioniert nicht für alle 2 Sekunden

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

versuchen ich diesen Fehler

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

I Wollen Sie diese Aufgabe wirklich alle paar Sekunden ausführen, wie kann ich das tun?

+0

Was tut Ihre Rake Aufgabe? – Stefan

+0

es senden zwei Anfragen an Drittanbieter API –

Antwort

4

Sie können dies nicht mit dem whenever Edelstein tun.

Unter der Haube, die whenever Edelstein schafft einfach eine cron job. Diese können nur mit einer minimalen Granularität von Minute konfiguriert werden.

Was Sie könnte statt schreiben ein Shell-Skript mit einer Endlosschleife, die Ihre Aufgabe ausführt, und dann für 2 Sekunden schläft. Allerdings würde ich davon abraten - etwas laufen zu lassen, das sich oft falsch anfühlt. Es gibt wahrscheinlich einen viel saubereren Ansatz, z.B. Laufen Sie Ihren Code als after_save Haken?

1

Sie haben den Fehler, da this der Grund

nur

Cron für mindestens eine Minute erlaubt. Sie können ein Shellskript mit einer Endlosschleife schreiben, die Ihre Aufgabe ausführt, und dann für 2 Sekunden inaktiv bleiben. Auf diese Weise wird Ihre Aufgabe mehr oder weniger alle 2 Sekunden ausgeführt, abhängig davon, wie lange die Aufgabe selbst dauert.

Es ist wirklich klingen wie Sie etwas tun, dass Sie sollten wahrscheinlich nicht durch eine Schleife obwohl

wie tun

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

Oder conrtab wird so etwas wie dieses

aussehen und in /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

Dies sollte ein Kommentar zu der anderen Antwort sein. – sawa

0

Eine Schleife mit Schienen Läufer funktioniert:

loop { 
    Ball.update_all_positions 
    sleep 2 
} 
Verwandte Themen