您可以用./script/rails runner
一起使用cron
,它可以從您的Rails應用程序執行任何方法。
由於您需要每秒執行一些操作,因此您可以啓動一次runner
並創建一個循環。您可以從cron啓動它,將PID保存到某個地方,然後讓cron殺死給定的進程,或者您可能只是在Ruby代碼中暫停循環。一個簡單的例子:
class MyModelOrAnything
def self.start_loop
stop_fname = "./stop_the_loop"
while !File.exist? stop_fname
do_this_action
sleep 1
end
ensure
File.unlink stop_fname if File.exist? stop_fname
end
end
一個cron任務可以再建立在已知目錄中的文件「stop_the_loop」,以及第二後你的任務將停止。
事實上,在這種情況下,cron可能不是必需的。由於您應該只有該腳本的一個實例,因此最好手動啓動它並手動停止它。如果你想使用cron,你可以添加一個類似信號量的文件,它會告訴腳本一個進程已經在運行(該文件應該被'確保'塊刪除)。
cron的配置的一個例子:
0 8 * * 1 cd /my/app && bundle exec ./script/rails runner ThisObject.start_loop
0 22 * * 5 touch /my/app/stop_the_loop
..和這個「信號」的例子:
class MyModelOrAnything
def self.start_loop
running_fname = "./i_am_working"
return :already_running if File.exist? running_fname
stop_fname = "./stop_the_loop"
begin
File.open(running_fname,'w') {|f| f.write Time.now.to_s(:db) }
while !File.exist? stop_fname
do_this_action
sleep 1
end
ensure
File.unlink running_fname if File.exist? running_fname
File.unlink stop_fname if File.exist? stop_fname
end
end
end
我認爲你正在尋找一個cron工作。看到每當寶石。 Railscasts提供的教程。 – apneadiving 2011-05-30 10:53:55