Подтвердить что ты не робот

Планировщик задач Windows для выполнения задач в секундах

Я ищу планировщик с открытым исходным кодом/бесплатно для Windows 7 (машина для разработки), которая позволит мне планировать задачи (HTTP-запросы к веб-службе) для запуска каждые x секунд.

Я пробовал пару клонов Cron и Windows собственный планировщик заданий, но ни один из них не позволяет запускать задачи с интервалом менее 60 секунд. Я что-то упускаю? Я не хочу, чтобы я мог писать и писать любые пользовательские сценарии, если это возможно.

4b9b3361

Ответ 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"]);
        }
    }

код >