web-dev-qa-db-ja.com

数秒でタスクを実行するWindowsタスクスケジューラ

X秒ごとに実行するタスク(WebサービスへのHTTP要求)をスケジュールできるWindows 7(開発マシン)用のオープンソース/無料のタスクスケジューラを探しています。

いくつかのCronクローンとWindows独自のタスクスケジューラを試しましたが、どちらも60秒未満の間隔でタスクを実行できないようです。私は何かが足りないのですか?可能であれば、カスタムスクリプトを作成する必要もありません。

17
Barry Jordan

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

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

32
Andre

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

更新:複雑すぎたようです。

トリガーでは、"Repeat task every:"実際に[〜#〜] type [〜#〜]ドロップダウンに入ることができます"1分"(秒単位で時間を入力することはできません)

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

また、質問者はすでに1分まで時間を短縮できたようで、質問を十分に読んでいないことは明らかです。ただし、この回答は、将来の読者のために時間を1分に短縮する方法を正確に説明するため、ここに残しておきます。

1分未満の間隔で実行することはできないようです。


トリガーをDailyに設定して、1日ごとに繰り返すタスクを設定しました。 [タスクを毎回繰り返す]チェックボックスをオンにします。 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>
7
kralco626

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

非常に単純な定期的なHTTPGETスケジューラーをJava using quartz Scheduler を使用して)作成することになりました。 https://github.com/bjordan/simple_Java_periodic_HTTP_scheduler

3
Barry Jordan

簡単な説明:メインプログラムは、メモリ内でアクティブなままで、定期的にジョブをアクティブ化するサービスプロセスを開始します-何かをします。

Job scheduler

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

これが.NET/MonoのWindowsサービスとLinuxデーモン用のテンプレートC#ソリューションです https://github.com/mchudinov/ServiceDemon そして それについての短いブログ投稿

    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"]);
        }
    }
</ code>
0
Mikael Chudinov