Планировщик задач Windows для выполнения задач в секундах
Я ищу планировщик с открытым исходным кодом/бесплатно для Windows 7 (машина для разработки), которая позволит мне планировать задачи (HTTP-запросы к веб-службе) для запуска каждые x секунд.
Я пробовал пару клонов Cron и Windows собственный планировщик заданий, но ни один из них не позволяет запускать задачи с интервалом менее 60 секунд. Я что-то упускаю? Я не хочу, чтобы я мог писать и писать любые пользовательские сценарии, если это возможно.
Ответы
Ответ 1
Я убил это до смерти, так как, насколько я вижу ответ, их нет. Существует множество коммерческих решений, но нет открытых/бесплатных программ.
В итоге я написал очень простой периодический планировщик HTTP GET в java, используя планировщик кварца. Это может быть полезно для других, поэтому отправляйте ссылку на источник на guthub https://github.com/bjordan/simple_java_periodic_HTTP_scheduler
Ответ 2
Можно создать несколько триггеров для одной запланированной задачи. Если вы создаете 59 одинаковых триггеров со смещением 1 секунды друг к другу и планируете каждую задачу запускать каждую минуту, вы запускаете запланированную задачу каждую секунду.
Вы можете создать эти 59 триггеров вручную с помощью графического интерфейса. Однако гораздо более быстрый способ создать так много триггеров - создать задачу с одним или двумя триггерами, экспортировать ее в текстовый файл, дублировать соответствующие строки, соответственно изменить начальные смещения и затем повторно импортировать файл.
Ответ 3
Я действительно смог добиться этого.
Обновление: похоже, я усложнил его.
В триггере, где он говорит "Повторять задачу каждый:" , вы можете на самом деле ТИП в раскрывающемся списке "1 минута (Это не позволит вам вводить время в секундах)
Я сделал это на машине под Windows 7.
Кроме того, я, очевидно, не очень хорошо читал вопрос, так как, как мне кажется, уже удалось получить время до 1 минуты. Тем не менее, я оставлю этот ответ здесь, так как он будет объяснять будущим читателям, как точно сократить время до одной минуты.
Кажется, вы не можете заставить его работать с интервалом менее одной минуты.
Я установил задачу с триггером, установленным в Daily, чтобы возвращаться каждые 1 день.
Я проверяю поле "Повторить задачу каждый:". Установка его на 5 минут в течение 1 дня
Это заставляет задачу работать навсегда, каждые 5 минут.
Затем я экспортировал задачу. Он экспортируется в файл .xml.
В Task > Triggers > CalendarTrigger > Repeition
есть следующий тег: <Interval>PT5M</Interval>
Я изменил его с PT5M
на PT1M
. Я повторно импортировал задачу.
Задача теперь выполняется каждые 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>
Ответ 4
Краткое объяснение:
Основная программа запускает сервисный процесс, который останется активным в памяти и будет периодически активировать задание - сделайте что-нибудь.
![Планировщик заданий]()
- Создайте класс, который расширяет класс System.ServiceProcess.ServiceBase
- Реализовать как минимум методы OnStart и OnStop
- Запуск и использование планировщика Quartz.NET в OnStart для периодического запуска задач
Вот мое решение для С# для службы Windows и демон Linux в .NET/Mono https://github.com/mchudinov/ServiceDemon
И короткая blogpost об этом
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"]);
}
}
код >