Quartz.NETは .NET用のスケジューリングジョブライブラリです。
http://quartznet.sourceforge.net/
たまたま見つけたので、Windows Azureで使えるか、たまたま試してみました。
まずは、Windows Azure クラウドサービスを含んだプロジェクトを作成します。
そして、Quartz.NETライブラリを追加します。
NuGetからでも、Quartz.NETのサイトからダウンロードしてQuartz.dllファイルを参照設定に追加しても、どちらでもOKです。
スケジュールジョブの設定を下記のように作成して OnStart で動かすようにします。
private void SetScheduleTask() { const string JOBNAME = "SimpleJob"; const string JOBGROUP = "SimpleJobGroup"; var factory = new StdSchedulerFactory(); var schedule = factory.GetScheduler(); if (!schedule.IsStarted) schedule.Start(); var job = JobBuilder.Create<SimpleJob>() .WithIdentity(JOBNAME, JOBGROUP) .RequestRecovery() .Build(); // 5分間隔で実行 var trigger1 = TriggerBuilder.Create() .WithIdentity(JOBNAME, JOBGROUP) .StartNow() .WithCalendarIntervalSchedule(x => x.WithIntervalInMinutes(5)) .Build(); // Cron 的な書き方でもOK var trigger2 = TriggerBuilder.Create() .WithIdentity(JOBNAME, JOBGROUP) .StartNow() .WithCronSchedule("0 0/5 * * * ?") .Build(); schedule.ScheduleJob(job, trigger1); }
次に、スケジュールジョブの処理内容を下記のように作成してみます。
namespace WorkerRole1 { public class SimpleJob : IJob { public void Execute(IJobExecutionContext context) { var msg = string.Format("{0} : SCHEDULE TASK", DateTime.UtcNow); Trace.WriteLine(msg, "Information"); } } }
以上で設定は完了です。あとは実際にデプロイして確認です。
たまたま今回は診断のトレースログに、たまたま5分間隔でログを書き込むようなスケジュールジョブを作成してみましたが、ちゃんと動いてますね。