需要在指定的时间内查询某些表进行处理,需要写一个后台进程,如何写?
whenever 用的是 cron,好像每次执行任务要新开一个 ruby 进程,需要加载 rails environment。不适合间隔短的定时任务
whenever
#1 楼 @saiga 我用的是这个 gem 包:
gem 'rufus-scheduler'
代码:
scheduler.cron '21 16 * * *' do puts "ruby" end
如果这样运行,代码块里也是重新开一个 ruby 进程吗? 还有能查看运行的是哪个进程吗?
定时执行:whenever
ruby 脚本查询表:ActiveRecord
ActiveRecord
最后 whenever -i 完事。
whenever -i
#2 楼 @zqalyc 看了一下源码,也是开启一个独立的后台进程,不过不同 cron。那个 GEM 只在初始化的时候开启一个常驻进程,通过线程派发执行任务,效率上要好很多。
https://github.com/jmettraux/rufus-scheduler/blob/master/lib/rufus/scheduler.rb#L448
在运行的时候应该会打印 pid 到 lockfile,那个就是 rufus-scheduler 的进程 id
# 指定 lockfile scheduler = Rufus::Scheduler.new lockfile: '/tmp/scheduler.stat'
以上只供参考,我没用这个 gem
#4 楼 @saiga 谢谢啦,以后要学习看源码了,呵呵