X秒ごとに実行するタスク(WebサービスへのHTTP要求)をスケジュールできるWindows 7(開発マシン)用のオープンソース/無料のタスクスケジューラを探しています。
いくつかのCronクローンとWindows独自のタスクスケジューラを試しましたが、どちらも60秒未満の間隔でタスクを実行できないようです。私は何かが足りないのですか?可能であれば、カスタムスクリプトを作成する必要もありません。
1つのスケジュールされたタスクに対して複数のトリガーを作成することができます。互いに1秒のオフセットで59個の同一のトリガーを作成し、タスク自体を1分ごとに実行するようにスケジュールすると、スケジュールされたタスクは1秒ごとに実行されることになります。
GUIを使用して、これらの59個のトリガーを手動で作成できます。ただし、非常に多くのトリガーを作成するはるかに迅速な方法は、1つまたは2つのトリガーを使用してタスクを作成し、それをテキストファイルにエクスポートし、対応する行を複製し、それに応じて開始オフセットを変更してから、ファイルを再インポートすることです。
私は実際にこれを達成することができました。
更新:複雑すぎたようです。
トリガーでは、"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>
私はこれをグーグルで殺しました、私が答えを見る限り、何もありません。商用ソリューションはたくさんありますが、オープンソース/無料のプログラムはありません。
非常に単純な定期的なHTTPGETスケジューラーをJava using quartz Scheduler を使用して)作成することになりました。 https://github.com/bjordan/simple_Java_periodic_HTTP_scheduler
簡単な説明:メインプログラムは、メモリ内でアクティブなままで、定期的にジョブをアクティブ化するサービスプロセスを開始します-何かをします。
これが.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>