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

17

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

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

    
задан Barry Jordan 14.10.2011 в 17:07
источник
  • Вы рассматривали Quartz.NET? –  Nano Taboada 14.10.2011 в 17:40
  • @Nando - мы работаем с Coldfusion, который построен на Java, поэтому я уже проверил quartz-scheduler.org. Я ищу программу, которая не требует написания пользовательского кода, просто программа рабочего стола или командной строки, которая позволит мне сделать HTTP-запросы интервалами между 1 и 60 секундами. –  Barry Jordan 14.10.2011 в 17:46
  • Тогда я думаю, вам, возможно, повезло бы просить у Суперпользователя, поскольку этот сайт предназначен в основном для программирования вопросов. –  Nano Taboada 14.10.2011 в 17:50
  • @BarryJordan Не могли бы вы перевести свой принятый ответ на тот или иной ответ? он обеспечивает лучший ответ, чем ваш собственный для будущих пользователей. –  Tschallacka 19.05.2017 в 11:22

4 ответа

30

Можно создать несколько триггеров для одной запланированной задачи. Если вы создаете 59 одинаковых триггеров со смещением в 1 секунду друг от друга и планируете каждую задачу запускать каждую минуту, вы заканчиваете запланированную задачу для запуска каждую секунду.

Вы можете создать эти 59 триггеров вручную с помощью графического интерфейса. Однако гораздо более быстрый способ создать так много триггеров - создать задачу с одним или двумя триггерами, экспортировать ее в текстовый файл, дублировать соответствующие строки, соответственно изменить начальные смещения и затем повторно импортировать файл.     

ответ дан Andre 06.12.2012 в 10:39
источник
  • он работал довольно хорошо, спасибо. –  user1940676 21.08.2013 в 12:22
  • Мне пришлось добавить две задачи, поскольку я мог добавлять только триггеры в течение секунд 0 - 47, прежде чем столкнуться с ошибкой (предположим, что ошибка схемы). –  baileyswalk 08.01.2015 в 13:10
  • Проверьте этот связанный пост суперпользователя - вам просто нужно настроить несколько триггеров, начиная с разных вторых смещений. –  SliverNinja - MSFT 08.01.2016 в 20:41
  • @SilverNinja Спасибо за упоминание этой связанной записи. Он делает то, что я описал выше. Я отредактировал свой ответ, чтобы уточнить, что решение текстового файла - это более удобный способ настроить триггеры по сравнению с использованием графического интерфейса, особенно при настройке задачи для запуска каждую секунду (а не каждые 10 секунд, как в ответе суперпользователя) –  Andre 13.01.2016 в 16:29
  • Там должно быть особое место в аду для тех, кто разработал Планировщик задач Windows –  nixe 25.08.2016 в 21:13
6

Я действительно смог добиться этого.

Обновление: похоже, я усложнил его.

В триггере, где он говорит «Повторять задачу каждый:« , вы можете на самом деле ТИП в раскрывающемся списке "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>
    
ответ дан kralco626 07.11.2013 в 23:30
источник
3

Я убил это до смерти, так как, насколько я вижу ответ, их нет. Существует множество коммерческих решений, но нет открытых / бесплатных программ.

В итоге я написал очень простой периодический планировщик HTTP GET в java, используя планировщик кварца . Это может быть полезно для других, поэтому отправляйте ссылку на источник на guthub Ссылка

    
ответ дан Barry Jordan 19.10.2011 в 23:17
источник
  • +1 для завершения этого с вашим собственным ответом. –  Bruno Brant 01.11.2012 в 15:12
  • Удалена ссылка .. спасибо. –  Barry Jordan 17.12.2012 в 11:03
  • Покойся с миром, мой друг. –  user1940676 20.08.2013 в 09:43
0

Краткое объяснение: Основная программа запускает сервисный процесс, который останется активным в памяти и будет периодически активировать задание - сделайте что-нибудь.

  1. Создайте класс, который расширяет класс System.ServiceProcess.ServiceBase
  2. Реализовать как минимум методы OnStart и OnStop
  3. Запуск и использование планировщика Quartz.NET в OnStart для периодического запуска задач

Вот мое решение для C # для службы Windows и демон Linux в .NET / Mono Ссылка И короткий блог-блог об этом

    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"]);
        }
    }

    

ответ дан Mikael Chudinov 19.01.2016 в 00:08
источник
  • Обратите внимание, что ссылки только для ответов не приветствуются, ответы SO должны быть конечной точкой поиска решения (и еще одной остановкой ссылок, которые со временем становятся устаревшими). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. –  kleopatra 19.01.2016 в 00:12