私はC#でWindowsサービスとしてQuartz.NETを実装しようとしています。私の仕事は、私がそれらを誘発することを期待したときに誘発していません...まったく、実際には、私が知る限りでは?Quartz.NET - ジョブは実行されませんか?
私の仕事のスケジュールは、「微妙に」実行された後の次の瞬間からも始まります。しかし、次の分が来ると、実際に何かが走っているかどうかは分からないようです。
ジョブ実行時にCLIウィンドウがジョブ実行時にポップアップ表示され、コンソール操作が表示されることが考えられます(私はさらにウィンドウが開かないようにするためにConsole.ReadKey()
をそこに入れます)私はそれを見ることはできませんが)、私はスケジュールを伝えることができる限り、単にジョブを実行していません。
私はすべての時間がUTCであり、StartTimeUtc
は自分のローカルコンピュータから+6時間のUTC時間に設定されていることに気付きましたが、Quartzスケジューラが実行を計算して私のTimeZone設定からの時間ですが、私はそれを確認する方法がない、または私のスケジュールが設定されている実際の時間を確認する方法はありません。
Common Loggingアセンブリを設定し、それを利用して自分のステータスを知るのに役立つと思いますが、私はまだそれをどのように処理したらよいのか分かりません。私はそれを作成したイベントログへの書き込みとは別に、Windowsサービス。
次のように私のWindowsサービス
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("--- STARTING eLoyalty Scheduler Service ---");
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
// construct job info
JobDetail jobDetail = new JobDetail("eLoyaltySchedulerService", null, typeof(PortalSchedulerJob));
jobDetail.JobDataMap["jobSays"] = "eLoyalty Scheduler Service Executing!";
jobDetail.JobDataMap["myStateData"] = new ArrayList();
// fire every minute
Trigger trigger = TriggerUtils.MakeMinutelyTrigger();
// start on the next even minute
trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow);
// name it
trigger.Name = "NextEvenMinute";
// schedule it
sched.ScheduleJob(jobDetail, trigger);
// start the schedule
sched.Start();
eventLog.WriteEntry("--- STARTED eLoyalty Scheduler Service ---");
}
私の仕事のExecute()関数の私のOnStart機能は次のとおりです。
public void Execute(JobExecutionContext context)
{
try
{
string instName = context.JobDetail.Name;
string instGroup = context.JobDetail.Group;
JobDataMap dataMap = context.MergedJobDataMap;
string jobSays = dataMap.GetString("jobSays");
ArrayList state = (ArrayList)dataMap["myStateData"];
state.Add(DateTime.UtcNow);
Console.WriteLine("Instance {0} of PortalSchedulerJob says: {1} @ {2}", instName, jobSays, DateTime.UtcNow);
Console.ReadKey();
}
catch (JobExecutionException Ex)
{
throw Ex;
}
}
あなたは私のACTUALスケジュール・アクティビティをトラブルシューティングする方法を見つけ出すことができた場合は、私はこれを私自身で解決できるかもしれません...?
私が正しく覚えていれば、Console.AnythingはWindowsサービスを爆破します。 –