it-swarm.com.de

Windows-Taskplaner zum Ausführen von Aufgaben in Sekunden

Ich suche nach einem Open Source/Free Task Scheduler für Windows 7 (Entwicklungsmaschine), der es mir ermöglicht, Tasks (HTTP-Anforderungen an einen Webdienst) so zu planen, dass sie alle x Sekunden ausgeführt werden.

Ich habe ein paar Cron-Klone und Windows-eigene Taskplaner ausprobiert, doch scheinen beide Aufgaben nicht in Intervallen von weniger als 60 Sekunden auszuführen. Fehlt mir etwas? Ich möchte auch nicht, wenn möglich, eigene Skripts schreiben.

17
Barry Jordan

Es ist möglich, mehrere Trigger für eine geplante Aufgabe zu erstellen. Wenn Sie 59 identische Trigger mit einem Versatz von 1 Sekunde zueinander erstellen und die Ausführung der Aufgabe für jede Minute planen, endet die geplante Aufgabe für jede Sekunde.

Sie können diese 59 Trigger manuell über die GUI erstellen. Eine viel schnellere Methode zum Erstellen so vieler Trigger besteht jedoch darin, eine Aufgabe mit einem oder zwei Triggern zu erstellen, sie in eine Textdatei zu exportieren, die entsprechenden Zeilen zu duplizieren, die Startversätze entsprechend zu ändern und die Datei anschließend erneut zu importieren.

30
Andre

Ich konnte das tatsächlich erreichen.

Update: Scheint ich übermäßig kompliziert.

Im Auslöser steht dort "Task wiederholen alle:" Sie können tatsächlichin das Dropdown-Menü "1 Minute" eingeben (Die Zeit wird nicht in Sekunden eingegeben )

Ich habe das auf einem Windows 7-Rechner gemacht.

Ich habe die Frage offensichtlich auch nicht gut genug gelesen, da der Fragesteller die Zeit bereits auf 1 Minute heruntergefahren zu haben scheint. Ich werde diese Antwort jedoch hier belassen, da dies für zukünftige Leser genau erklärt wird, wie die Zeit auf eine Minute reduziert wird.

Es scheint, als könnten Sie es nicht in einem Intervall von weniger als einer Minute laufen lassen.


Ich habe eine Aufgabe mit einem Auslöser eingerichtet, der auf "Täglich" eingestellt ist, um sich jeden Tag zu wiederholen. Ich aktiviere das Kästchen "Task wiederholen alle:". Stellen Sie ihn für 1 Tag auf 5 Minuten ein

Dadurch wird die Aufgabe alle fünf Minuten für immer erledigt.

Ich habe dann die Aufgabe exportiert. Es wird in eine XML-Datei exportiert.

Unter Task > Triggers > CalendarTrigger > Repeition befindet sich das folgende Tag: <Interval>PT5M</Interval> Ich habe es von PT5M in PT1M geändert. Ich habe die Aufgabe erneut importiert.

Die Aufgabe wird jetzt alle 1 Minute ausgeführt.

Ich habe dies nicht vollständig getestet, und ich habe es auch nicht mit weniger als einer Minute versucht, aber es könnte möglich sein, PT30S oder etwas für 30 Sekunden einzugeben. Ich werde es ausprobieren und berichten. Update: Dies ist nicht möglich. Beim Importieren der Aufgabe wird ein Fehler angezeigt. Es ist nicht möglich, diese Zeit auf weniger als 1 Minute einzustellen.

Der ganze Abzug sieht für mich so aus:

  <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>
6
kralco626

Ich habe dies zu Tode gegoogelt, so weit ich sehen kann, ist die Antwort, es gibt keine. Es gibt viele kommerzielle Lösungen, aber keine Open Source/Free-Programme.

Am Ende schrieb ich einen sehr einfachen periodischen HTTP-GET-Scheduler in Java mit quartz scheduler . Es kann nützlich sein, einen anderen Link zu der Quelle auf guthub https://github.com/bjordan/simple_Java_periodic_HTTP_scheduler zu veröffentlichen.

3
Barry Jordan

Kurze Erklärung: Das Hauptprogramm startet einen Serviceprozess, der im Speicher aktiv bleibt und periodisch einen Job aktiviert - etwas tun.

 Job scheduler

  1. Erstellen Sie eine Klasse, die die System.ServiceProcess.ServiceBase-Klasse erweitert
  2. Implementieren Sie mindestens die Methoden OnStart und OnStop
  3. Starten Sie den Quartz.NET-Scheduler und verwenden Sie ihn in OnStart, um Aufgaben regelmäßig auszuführen

Hier ist meine C # -Lösung für einen Windows-Dienst und einen Linux-Dämon in .NET/Mono https://github.com/mchudinov/ServiceDemon Und ein kurzer Blogpost darüber

    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>
0
Mikael Chudinov