2011-10-14 156 views
17

我正在尋找Windows 7(開發機器)的開源/免費任務調度程序,它將允許我將任務(對Web服務的HTTP請求)安排爲每x秒運行一次。Windows任務調度程序在幾秒鐘內執行任務

我已經嘗試了幾個Cron克隆和窗口自己的任務計劃程序,但似乎都不允許任務運行間隔少於60秒。我錯過了什麼嗎?如果可能的話,我不想去寫任何自定義腳本。

+0

你有沒有考慮[Quartz.NET(http://quartznet.sourceforge.net/)? –

+0

@Nando - 我們使用基於Java構建的Coldfusion,所以我已經檢查過http://www.quartz-scheduler.org。我正在尋找一個不需要自定義代碼編寫的程序,只需一個桌面或命令行程序,即可讓我在1到60秒之間發出HTTP請求。 –

+0

那麼我想你可能會有更好的運氣問在[超級用戶](http://superuser.com/),因爲這個網站主要是編程問題。 –

回答

3

我把這個搜索到了死亡,所以據我所見,答案是沒有。有很多商業解決方案,但沒有開源/免費程序。

我最終在java中使用quartz scheduler寫了一個非常簡單的定期HTTP GET調度程序。對於其他在guthub上張貼指向源的鏈接可能很有用https://github.com/bjordan/simple_java_periodic_HTTP_scheduler

+0

+1爲您完成此與您自己的答案。 –

+0

刪除參考..謝謝。 –

+0

安息我的朋友。 – user1940676

30

可以爲一個計劃任務創建多個觸發器。如果您創建59個相同的觸發器,並且每秒都有1秒的偏移量,並且計劃任務本身每分鐘運行一次,那麼最終計劃的任務將每秒運行一次。

您可以使用GUI手動創建這59個觸發器。但是,創建這麼多觸發器的更快速的方法是創建一個帶有一個或兩個觸發器的任務,將其導出到文本文件,複製相應的行,相應地更改開始偏移量,然後重新導入文件。

+0

它工作得很好,謝謝。 – user1940676

+1

我不得不添加兩個任務,因爲我只能在遇到錯誤(我假設爲模式錯誤)之前的0到47秒內添加觸發器。 – baileyswalk

+0

查看[this superuser post](http://superuser.com/a/668074/108939) - 您只需設置多個觸發器,以不同的第二偏移量開始。 – SliverNinja

6

我實際上能夠做到這一點。

更新:似乎我過於複雜了。

在觸發,它說:「重複任務間隔:」你其實可以TYPE到下拉「1分」(它不會讓你鍵入秒的時間)

我是在Windows 7機器上完成的。

另外,我清楚地沒有看清這個問題,因爲提問者似乎已經能夠把時間縮短到1分鐘。不過,我會在這裏留下這個答案,因爲它會向未來的讀者解釋如何將時間縮短到一分鐘。

看起來好像你不能讓它在不到一分鐘的時間間隔內運行。


我設置了設置爲每日復發的每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> 
0

簡短說明: 主程序啓動的服務程序,將留在內存中的活動,並將定期激活一個任務 - 做一些事情。

Job scheduler

  1. 創建擴展了System.ServiceProcess.ServiceBase類
  2. 落實的OnStart和調用OnStop
  3. 開始,用Quartz.NET調度處理通信定期運行任務
  4. 至少方法的類

這是我在.NET/Mono中用於Windows服務和Linux惡魔的模板C#解決方案https://github.com/mchudinov/ServiceDemon 而且a short blogpost about it

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

+0

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是尋求解決方案的終點(而另一個參考的中途停留時間往往會隨着時間的推移而變得陳舊)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra

相關問題