ワークフロー / ビジネスプロセスエンジンであるOpenWFEru にはタスクを後で実行したり(at) 、繰り返し実行する(cron)ためのスケジューラーが必要です。
このスケジューラーは OpenWFE の核心ではないので、ここでは OpenWFEru のコンテキストの外側での使用方法を説明します。
OpenWFEru の他の部分同様、BSD ライセンスです。
OpenWFEru スケジューラーは Ilya Grigorik’s blog post の Scheduling tasks in Ruby / Rails で説明されています。
スケジューラーを使うにあたっては、OpenWFEru 全てが必要ではありません。以下の2 つのファイルのみが必要となります。 :
lib/openwfe/util/otime.rb
lib/openwfe/util/scheduler.rb
これらは OpenWFEru のサブディレクトリの util にあります。
2007 年4月1日より、, “openwferu-scheduler” 用の gem ができました。それを使えば以下のようにするだけです。
[sudo] gem install openwferu-scheduler
ここまでいいですか?で、それを使うには、直接以下のように…
require 'rubygems'
require 'openwfe/util/scheduler'
include OpenWFE
scheduler = Scheduler.new
scheduler.start
scheduler.schedule_in("1h12m") do
puts "...taking out the garbage (as requested one hour and twelve minutes ago)"
end
# ...
スケジューラーの rdoc です。これはスケジューラーに関する最新の情報ソースです。
“at” ジョブは、将来一度だけ実行されるジョブです。これはスケジューラーの schedule_in() メソッドや schedule_at() メソッドで登録されます。
基本的な使い方は…。 :
scheduler.schedule_in("1h12m") do
puts "one hour and twelve minutes later..."
end
“at” ジョブの 例 です。
“cron” ジョブは、Unix のそれと同等の機能です。なので、このRubyのスケジューラーもその 従来どおりの指定 に従っています。
scheduler.schedule("1-60/3 * * * mon-fri") do
puts "...popping up every 3 minutes on weekdays..."
end
“cron” ジョブの 例 です。
cron よりも柔軟性があります。:
scheduler.schedule_every("12m45s") do
puts "...popping up every 12 minutes and 45 seconds..."
end
もしあなたのジョブに 2 秒かかるとして、それが10秒毎にスケジューリングされていたら、実際は12 秒毎に実行されるということに注意してください。(新しい実行スレッド内のコードをラップできます。)
OpenWFEru のコンテキストでは、永続化はスケジューラーではなくエンジンの責任範囲です。
もし必要ないならば…。 :
$ sudo gem uninstall openwferu-scheduler
(続く)