2011-10-14 21 views
17

मैं विंडोज 7 (विकास मशीन) के लिए एक खुला स्रोत/मुक्त कार्य अनुसूचक है कि मुझे (एक वेब सेवा के लिए HTTP अनुरोध) कार्यों का समय निर्धारित करने की अनुमति देगा कि हर एक्स सेकंड को चलाने के लिए देख रहा हूँ ।Windows कार्य शेड्यूलर सेकंड में कार्य निष्पादित करने के लिए

मैं क्रॉन क्लोन और खिड़कियां स्वयं कार्य शेड्यूलर के एक जोड़े की कोशिश की है लेकिन न तो कार्य के लिए 60 सेकंड से भी कम समय के अंतराल पर चलाने की अनुमति दे रहे हैं। क्या मैं कुछ भूल रहा हूँ? यदि संभव हो तो मैं किसी भी कस्टम स्क्रिप्ट को जाना और लिखना नहीं चाहता हूं।

+0

आप पर विचार किया है [Quartz.NET] (http://quartznet.sourceforge.net/)? –

+0

@ नान्दो - हम कोल्डफ्यूजन के साथ काम करते हैं, जो जावा पर बना है, इसलिए मैंने पहले से ही http://www.quartz-scheduler.org की जांच की है। मैं ऐसे प्रोग्राम की तलाश में हूं जिसके लिए कस्टम कोड लिखा जाना आवश्यक नहीं है, बस एक डेस्कटॉप या कमांड लाइन प्रोग्राम जो मुझे HTTP अनुरोधों को 1 और 60 सेकंड के बीच अंतराल बनाने की अनुमति देगा। –

+0

तब मुझे लगता है कि आपको [सुपर उपयोगकर्ता] (http://superuser.com/) पर पूछने के लिए बेहतर भाग्य हो सकता है क्योंकि यह साइट मुख्य रूप से प्रोग्रामिंग प्रश्नों के लिए है। –

उत्तर

3

मैं मौत को यह googled है, तो जहाँ तक मैं देख सकता हूँ जवाब है, वहाँ कोई नहीं कर रहे हैं। बहुत सारे वाणिज्यिक समाधान हैं, लेकिन कोई खुला स्रोत/मुक्त कार्यक्रम नहीं है।

मैं quartz scheduler का उपयोग कर जावा में एक बहुत ही सरल आवधिक HTTP GET अनुसूचक लेखन समाप्त हो गया। यह अन्य के लिए उपयोगी हो सकता है ताकि guthub https://github.com/bjordan/simple_java_periodic_HTTP_scheduler

+0

+1 इसे अपने उत्तर के साथ पूरा करने के लिए। –

+0

हटाया गया संदर्भ .. धन्यवाद। –

+0

शांति में आराम करो मेरे दोस्त। – user1940676

30

पर स्रोत के लिंक को पोस्ट करना एक निर्धारित कार्य के लिए एकाधिक ट्रिगर्स बनाना संभव है। यदि आप एक दूसरे के लिए 1 सेकंड के ऑफसेट के साथ 59 समान ट्रिगर्स बनाते हैं, और कार्य को प्रत्येक मिनट चलाने के लिए शेड्यूल करते हैं, तो आप प्रत्येक सेकेंड को चलाने के लिए शेड्यूल किए गए कार्य को समाप्त करते हैं।

आप जीयूआई का उपयोग कर मैन्युअल रूप से उन 59 ट्रिगर्स बना सकते हैं। हालांकि, इतने सारे ट्रिगर्स बनाने का एक बहुत तेज़ तरीका एक या दो ट्रिगर्स के साथ एक कार्य बनाना है, इसे एक टेक्स्ट फ़ाइल में निर्यात करना, अनुसार लाइनों को डुप्लिकेट करना, तदनुसार स्टार्ट ऑफसेट को बदलें, और फिर फ़ाइल को दोबारा आयात करें।

+0

यह बहुत अच्छा काम किया, धन्यवाद। – user1940676

+1

मुझे दो कार्यों को जोड़ना पड़ा क्योंकि मैं एक त्रुटि (स्कीमा त्रुटि मुझे लगता है) से पहले सेकंड 0 - 47 के लिए ट्रिगर्स जोड़ सकता था। – baileyswalk

+0

[यह संबंधित सुपरसियर पोस्ट] देखें (http://superuser.com/a/668074/108939) - आपको बस अलग-अलग ऑफसेट पर शुरू होने वाले एकाधिक ट्रिगर सेट करने की आवश्यकता है। – SliverNinja

6

मैं वास्तव में इसे प्राप्त करने में सक्षम था।

अपडेट: मुझे जटिल लगता है।

ट्रिगर, जहां यह कहते हैं "दोहराएँ कार्य हर:" में आप वास्तव में प्रकार ड्रॉप-डाउन "1 मिनट" में (यह अभ्यस्त आप सेकंड में समय टाइप करते हैं) कर सकते हैं

मैंने इसे विंडोज 7 मशीन पर किया था।

इसके अलावा, मैं स्पष्ट रूप से, प्रश्न काफी अच्छी तरह से पढ़ नहीं था के रूप में पहले से ही प्रश्नकर्ता समय 1 मिनट के लिए नीचे लाने के लिए सक्षम किया गया है लगता है। हालांकि, मैं यह जवाब यहां छोड़ दूंगा, क्योंकि यह भविष्य के पाठकों के लिए समझाएगा कि एक मिनट तक समय कैसे प्राप्त करें।

ऐसा प्रतीत होता है कि आप इसे एक मिनट से भी कम अंतराल पर चलाने के लिए नहीं मिल सकते हैं।


मैंने हर 1 दिन दोबारा शुरू करने के लिए दैनिक ट्रिगर सेट के साथ एक कार्य स्थापित किया। मैं "प्रत्येक कार्य दोहराएं:" बॉक्स को चेक करता हूं। 1 दिन

यह कार्य करता है की अवधि के लिए 5 मिनट के लिए यह निर्धारित करना हमेशा के लिए जाना है, हर 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. प्रारंभ और onStart में Quartz.NET अनुसूचक का उपयोग कार्य समय-समय पर चलाने के लिए
  4. पर लागू बनाएं

यहां एक विंडोज सेवा के लिए मेरा टेम्पलेट सी # समाधान है और .NET/Mono 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) निराश हैं , SO उत्तर समाधान के लिए खोज का अंत बिंदु होना चाहिए (बनाम अभी तक संदर्भों का एक और स्टॉपओवर, जो समय के साथ बाँध लेता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें। – kleopatra