2011-10-14 71 views
17

Windows 7(開発マシン)用のオープンソース/フリータスクスケジューラを使用して、タスク(WebサービスへのHTTPリクエスト)をx秒ごとに実行できるようにします。タスクを数秒で実行するWindowsタスクスケジューラ

私はいくつかのCronクローンとウィンドウをタスクスケジューラに割り当てようとしましたが、どちらも60秒未満の間隔でタスクを実行できないようです。何か不足していますか?可能であれば、カスタムスクリプトを書く必要はありません。

+0

あなたは[Quartz.NET](http://quartznet.sourceforge.net/)と考えることがありますか? –

+0

@ Nando - 私たちはJavaで構築されているColdfusionと連携しているので、すでにhttp://www.quartz-scheduler.orgをチェックアウトしていました。私は、カスタムコードを書く必要がないプログラムを探しています。ちょうど1秒から60秒の間隔でHTTPリクエストを作成できるデスクトップまたはコマンドラインプログラムです。 –

+0

それでは、このサイトは主にプログラミングに関する質問であるため、[Super User](http://superuser.com/)にお尋ねする方がよいと思うかもしれません。 –

答えて

3

私はこれを拒否しました。私が答えを見ることができる限り、何もありません。商用ソリューションはたくさんありますが、オープンソース/フリープログラムはありません。

quartz schedulerを使用して、非常に単純な定期的なHTTP GETスケジューラをJavaで作成しました。他の人には、guthubのソースへのリンクを投稿すると便利かもしれません。https://github.com/bjordan/simple_java_periodic_HTTP_scheduler

+0

+1あなた自身の答えでこれを完了する。 –

+0

参照を削除しました。ありがとうございます。 –

+0

平和の中に私の友人。 – user1940676

30

1つのスケジュールされたタスクに対して複数のトリガーを作成することは可能です。互いのオフセットが1秒の59個の同一のトリガーを作成し、毎分実行するようにタスク自体をスケジュールすると、毎秒実行されるスケジュールされたタスクが終了します。

これらの59個のトリガーは、GUIを使用して手動で作成できます。しかし、非常に多くのトリガーを作成するはるかに迅速な方法は、1つまたは2つのトリガーでタスクを作成し、テキストファイルにエクスポートし、それに応じた行を複製し、それに応じて開始オフセットを変更してからファイルを再インポートすることです。

+0

非常にうまくいった、ありがとう。 – user1940676

+1

2つのタスクを追加する必要がありました。エラーが発生する前に0〜47秒のトリガーを追加するだけでした(スキーマエラーです)。 – baileyswalk

+0

[この関連するスーパーユーザの投稿](http://superuser.com/a/668074/108939)をチェックしてください。複数のトリガを異なる第2のオフセットからセットアップするだけで済みます。 – SliverNinja

6

私はこれを実際に達成することができました。

更新:私はそれを複雑に思えます。あなたが実際にをドロップダウン「1分」にTYPEが(それは文句を言わないあなたが時間を秒単位で入力してみましょう)することができます

:それは 「リピートタスクのすべてを」と言うトリガーでは、

私はWindows 7マシンでこれを行いました。

また、私は質問者が既に1分までの時間を得ることができたように、質問をよく読んでいませんでした。しかし、私はここで答えを残しておきます。これは、将来の読者のために、時間を1分にする方法を正確に説明するためです。

1分未満の間隔で実行できないように見えます。


トリガを設定してタスクを1日ごとに繰り返すように設定しました。 "Repeat every every:"チェックボックスをオンにします。 1分の間、5分に設定します。

これにより、タスクは5分ごとに永久に実行されます。

その後、タスクをエクスポートしました。 .xmlファイルにエクスポートします。

Task > Triggers > CalendarTrigger > Repeitionの下には、次のタグがあります。<Interval>PT5M</Interval>PT5MからPT1Mに変更しました。タスクを再インポートしました。

タスクは1分ごとに実行されるようになりました。

私はこれを完全にはテストしていませんが、1分以内で試してみませんでしたが、PT30Sなどを30秒間置くことで可能かもしれません。私はそれを試してみて、報告します。 更新:これを行うことはできません。タスクをインポートするときにエラーが発生します。この時間を1分未満に設定することはできません。

全体のトリガーは私のために次のようになります。

<Triggers> 
    <CalendarTrigger> 
     <Repetition> 
     <Interval>PT1M</Interval> 
     <Duration>P1D</Duration> 
     <StopAtDurationEnd>false</StopAtDurationEnd> 
     </Repetition> 
     <StartBoundary>2013-11-07T17:04:51.6062297</StartBoundary> 
     <Enabled>true</Enabled> 
     <ScheduleByDay> 
     <DaysInterval>1</DaysInterval> 
     </ScheduleByDay> 
    </CalendarTrigger> 
    </Triggers> 
0

短い説明: メインプログラムがメモリにアクティブに滞在するサービス・プロセスを開始し、定期的に仕事をアクティブにします - 何かをします。

Job scheduler

  1. System.ServiceProcess.ServiceBaseクラス
  2. は、少なくともメソッドOnStartメソッドとOnStop
  3. スタートし、定期的に
  4. をタスクを実行するためのOnStartでQuartz.NETスケジューラを使用で実装拡張するクラスを作成します。

WindowsサービスのテンプレートC#と.NET/MonoのLinuxデーモンhttps://github.com/mchudinov/ServiceDemon そしてa short blogpost about it

class Program 
    { 
     public static void Main(string[] args) 
     { 
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] { new ServiceDemon.Service() }; 
      ServiceBase.Run(ServicesToRun); 
     } 
    } 

    public class Service : ServiceBase 
    { 
     static IScheduler Scheduler { get; set; } 

     protected override void OnStart(string[] args) 
     { 
      StartScheduler(); 
      StartMyJob(); 
     } 

     protected override void OnStop() 
     { 
      Scheduler.Shutdown(); 
     } 

     void StartScheduler() 
     { 
      ISchedulerFactory schedFact = new StdSchedulerFactory(); 
      Scheduler = schedFact.GetScheduler(); 
      Scheduler.Start(); 
     } 

     void StartMyJob() 
     { 
      var seconds = Int16.Parse(ConfigurationManager.AppSettings["MyJobSeconds"]); 
      IJobDetail job = JobBuilder.Create<Jobs.MyJob>() 
       .WithIdentity("MyJob", "group1") 
       .UsingJobData("Param1", "Hello MyJob!") 
       .Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithIdentity("MyJobTrigger", "group1") 
       .StartNow() 
       .WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever()) 
       .Build(); 

      Scheduler.ScheduleJob(job, trigger); 
     } 
    } 

    public class MyJob : IJob 
    { 
     public void Execute(IJobExecutionContext context) 
     { 
      JobDataMap dataMap = context.JobDetail.JobDataMap; 
      log.Info(dataMap["Param1"]); 
     } 
    } 

+0

[リンクのみの回答](http://meta.stackoverflow.com/tags/link-only-answers/info)はお勧めできませんSOの回答は、解決策の検索の終点でなければなりません(時間の経過とともに古くなる傾向にある参照の途中停止)。リンクを参考にして、ここにスタンドアロンの概要を追加することを検討してください。 – kleopatra

関連する問題