2011-10-14 48 views
17

Tôi đang tìm trình lập lịch tác vụ miễn phí/mã nguồn mở cho Windows 7 (máy phát triển) cho phép tôi lên lịch tác vụ (yêu cầu HTTP tới dịch vụ web) chạy mỗi x giây .Trình lập lịch biểu tác vụ Windows để thực hiện các tác vụ trong vài giây

Tôi đã thử một vài bản sao Cron và các cửa sổ của Trình lập lịch tác vụ nhưng dường như không cho phép các tác vụ chạy trong khoảng thời gian dưới 60 giây. Tui bỏ lỡ điều gì vậy? Tôi không muốn phải đi và viết bất kỳ kịch bản tùy chỉnh nào nếu có thể.

+0

Bạn đã xem [Quartz.NET] (http://quartznet.sourceforge.net/)? –

+0

@Nando - chúng tôi làm việc với Coldfusion, được xây dựng trên Java, vì vậy tôi đã kiểm tra http://www.quartz-scheduler.org. Tôi đang tìm một chương trình không yêu cầu mã tùy chỉnh để viết, chỉ cần một chương trình máy tính để bàn hoặc dòng lệnh cho phép tôi thực hiện các yêu cầu HTTP một khoảng thời gian từ 1 đến 60 giây. –

+0

Sau đó, tôi đoán bạn có thể có may mắn hơn yêu cầu tại [Super User] (http://superuser.com/) như trang web này chủ yếu cho các câu hỏi lập trình. –

Trả lời

3

Tôi đã googled điều này đến chết, vì vậy theo như tôi có thể thấy câu trả lời là, không có gì. Có rất nhiều giải pháp thương mại, nhưng không có chương trình nguồn mở/miễn phí.

Tôi đã kết thúc viết một biểu đồ HTTP GET định kỳ rất đơn giản trong java bằng cách sử dụng quartz scheduler. Nó có thể hữu ích cho người khác để đăng liên kết tới nguồn trên guthub https://github.com/bjordan/simple_java_periodic_HTTP_scheduler

+0

+1 để hoàn thành điều này với câu trả lời của riêng bạn. –

+0

Đã xóa tham chiếu .. cảm ơn. –

+0

Nghỉ ngơi yên bình cho bạn tôi. – user1940676

30

Có thể tạo nhiều trình kích hoạt cho một tác vụ được lên lịch. Nếu bạn tạo 59 trình kích hoạt giống hệt nhau với độ lệch 1 giây với nhau và lập lịch nhiệm vụ để chạy mỗi phút, bạn sẽ kết thúc nhiệm vụ được lập biểu để chạy mỗi giây.

Bạn có thể tạo những trình kích hoạt 59 theo cách thủ công bằng GUI. Tuy nhiên, một cách nhanh hơn để tạo nhiều tác nhân là tạo một tác vụ với một hoặc hai trình kích hoạt, xuất nó thành một tệp văn bản, nhân đôi các dòng theo, thay đổi độ lệch bắt đầu cho phù hợp và sau đó nhập lại tệp.

+0

nó hoạt động khá tốt, cảm ơn. – user1940676

+1

Tôi phải thêm hai tác vụ vì tôi chỉ có thể thêm trình kích hoạt cho các giây 0 - 47 trước khi gặp lỗi (lỗi sơ đồ tôi đoán). – baileyswalk

+0

Kiểm tra [bài đăng siêu người dùng có liên quan này] (http://superuser.com/a/668074/108939) - bạn chỉ cần thiết lập nhiều trình kích hoạt bắt đầu từ các lần bù thứ hai khác nhau. – SliverNinja

6

Tôi thực sự có thể đạt được điều này.

Cập nhật: Dường như tôi quá phức tạp.

Trong cò, nơi nó nói "Lặp lại thao tác mỗi:" bạn có thể thực sự LOẠI vào trình đơn thả xuống "1 phút" (It wont cho phép bạn gõ thời gian tính bằng giây)

Tôi đã thực hiện việc này trên máy tính Windows 7.

Ngoài ra, tôi rõ ràng không đọc câu hỏi đủ tốt, vì người hỏi dường như đã có thể giảm thời gian xuống còn 1 phút. Tuy nhiên, tôi sẽ để lại câu trả lời ở đây, vì nó sẽ giải thích cho độc giả trong tương lai chính xác làm thế nào để có được thời gian xuống đến một phút.

Dường như bạn không thể chạy ứng dụng trong khoảng thời gian dưới một phút.


Tôi thiết lập tác vụ có trình kích hoạt được đặt thành Hàng ngày để tái diễn sau mỗi 1 ngày. Tôi chọn hộp "Lặp lại tác vụ mỗi:". Đặt cài đặt này thành 5 phút trong một khoảng thời gian 1 ngày

Thao tác này sẽ thực hiện tác vụ này vĩnh viễn sau mỗi 5 phút.

Sau đó, tôi đã xuất tác vụ. Nó xuất sang tệp .xml.

Dưới Task > Triggers > CalendarTrigger > Repeition có thẻ sau: <Interval>PT5M</Interval> Tôi đã thay đổi từ PT5M thành PT1M. Tôi đã nhập lại tác vụ.

Nhiệm vụ hiện chạy sau mỗi 1 phút.

Tôi chưa thử nghiệm đầy đủ tính năng này và tôi chưa thử với ít hơn một phút, nhưng có thể bằng cách đặt PT30S hoặc một cái gì đó trong 30 giây. Tôi sẽ thử và báo cáo lại. Cập nhật: Bạn không thể thực hiện việc này, bạn gặp lỗi khi nhập tác vụ. Không thể đặt thời gian này xuống dưới 1 phút.

Toàn bộ cò trông như thế này đối với tôi:

<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

lời giải thích ngắn gọn: chương trình chính bắt đầu một quá trình dịch vụ mà sẽ ở lại hoạt động trong bộ nhớ và sẽ định kỳ kích hoạt một công việc - làm điều gì đó.

Job scheduler

  1. Tạo một lớp mà kéo dài System.ServiceProcess.ServiceBase lớp
  2. Thực hiện các phương pháp ít nhất OnStart và OnStop
  3. Start và sử dụng Quartz.NET scheduler trong OnStart để chạy nhiệm vụ định kỳ

Đây là giải pháp mẫu C# của tôi cho dịch vụ Windows và một con quỷ Linux trong .NET/Mono https://github.com/mchudinov/ServiceDemona 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

Lưu ý rằng [câu trả lời chỉ có liên kết] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích , SO câu trả lời nên là điểm cuối của một tìm kiếm cho một giải pháp (so với một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra

Các vấn đề liên quan