Windows任务计划程序以秒为单位执行任务
我正在寻找一个针对Windows7(开发机器)的开源/免费任务调度器,它允许我将任务(对web服务的HTTP请求)计划为每x秒运行一次Windows任务计划程序以秒为单位执行任务,windows,cron,scheduled-tasks,scheduling,scheduler,Windows,Cron,Scheduled Tasks,Scheduling,Scheduler,我正在寻找一个针对Windows7(开发机器)的开源/免费任务调度器,它允许我将任务(对web服务的HTTP请求)计划为每x秒运行一次 我尝试了几个Cron克隆和windows自己的任务调度器,但它们都不允许任务以少于60秒的间隔运行。我错过什么了吗?如果可能的话,我也不想去写任何自定义脚本。我已经用谷歌搜索到了这个,就我所能看到的答案是,没有。有很多商业解决方案,但没有开源/免费的程序 最后,我使用java编写了一个非常简单的定期HTTP GET调度程序。它可能对其他人有用,因此在guthub
我尝试了几个Cron克隆和windows自己的任务调度器,但它们都不允许任务以少于60秒的间隔运行。我错过什么了吗?如果可能的话,我也不想去写任何自定义脚本。我已经用谷歌搜索到了这个,就我所能看到的答案是,没有。有很多商业解决方案,但没有开源/免费的程序
最后,我使用java编写了一个非常简单的定期HTTP GET调度程序。它可能对其他人有用,因此在guthub上发布到源的链接可以为一个计划任务创建多个触发器。如果创建59个相互偏移1秒的相同触发器,并将任务本身计划为每分钟运行一次,则计划的任务将结束为每秒运行一次
您可以使用GUI手动创建这59个触发器。但是,创建这么多触发器的一种更快的方法是创建一个包含一个或两个触发器的任务,将其导出到文本文件中,复制相应的行,相应地更改开始偏移量,然后重新导入文件。我实际上能够做到这一点。 更新:似乎我把它复杂化了。 在触发器中,它会显示“每重复一次任务:”您实际上可以在下拉列表中键入“”1分钟“(它不会让您以秒为单位键入时间) 我是在Windows7机器上做的 此外,我显然没有把问题读得足够好,因为提问者似乎已经能够把时间缩短到1分钟。不过,我将把这个答案留在这里,因为它将为未来的读者解释如何将时间缩短到一分钟 似乎你不能让它以少于一分钟的间隔运行
我设置了一个任务,将触发器设置为Daily,以便每1天重复一次。 我勾选“每个重复任务:”框。将其设置为5分钟,持续时间为1天 这将使任务每5分钟执行一次 然后我导出了任务。它导出为.xml文件 在
Task>Triggers>CalendarTrigger>repetition
下有以下标签:PT5M
我将其从PT5M
更改为PT1M
。我重新导入了任务
该任务现在每1分钟运行一次
我还没有完全测试过这一点,我也没有在一分钟内尝试过,但可以将PT30S
或其他东西放置30秒。我会试试看,然后回来汇报更新:无法执行此操作,导入任务时会出现错误。无法将此时间设置为小于1分钟。
整个触发器在我看来是这样的:
PT1M
P1D
假的
2013-11-07T17:04:51.6062297
真的
1.
简短说明:
主程序启动一个服务进程,该进程将在内存中保持活动状态,并定期激活作业–执行某些操作
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"]);
}
}
类程序
{
公共静态void Main(字符串[]args)
{
ServiceBase[]ServicesToRun;
ServicesToRun=newServiceBase[]{new ServiceDemon.Service()};
ServiceBase.Run(ServicesToRun);
}
}
公共类服务:ServiceBase
{
静态ISScheduler调度程序{get;set;}
启动时受保护的覆盖无效(字符串[]args)
{
StartScheduler();
StartMyJob();
}
受保护的覆盖void OnStop()
{
Scheduler.Shutdown();
}
void StartScheduler()
{
isSchedulerFactory schedFact=新StdSchedulerFactory();
Scheduler=schedFact.GetScheduler();
Scheduler.Start();
}
void StartMyJob()
{
var seconds=Int16.Parse(ConfigurationManager.AppSettings[“myjobsonds”]);
IJobDetail job=JobBuilder.Create()
.WithIdentity(“我的工作”、“组1”)
.UsingJobData(“Param1”,“你好,我的工作!”)
.Build();
ITrigger trigger=TriggerBuilder.Create()
.WithIdentity(“MyJobTrigger”、“group1”)
.StartNow()
.WithSimpleSchedule(x=>x.WithIntervalInSeconds(秒).RepeatForever())
.Build();
ScheduleJob(作业,触发器);
}
}
公共类MyJob:IJob
{
public void Execute(IJobExecutionContext上下文)
{
JobDataMap dataMap=context.jobdail.JobDataMap;
log.Info(dataMap[“Param1]”);
}
}
你考虑过吗?@Nando-我们使用基于Java的Coldfusion,所以我已经签出了。我正在寻找一个不需要编写自定义代码的程序,只是一个桌面或命令行程序,允许我在1到60秒之间进行HTTP请求。然后我猜你可能会有更好的运气,因为这个站点主要用于编程问题。@ BarryJordan,你能考虑把你接受的答案移到一个或另一个答案吗?它为未来的用户提供了一个比您自己的更好的答案。请放心,我的朋友。我必须添加两个任务,因为在遇到错误之前,我只能在0-47秒内添加触发器(我猜是架构错误)。请检查-您