2009-04-06 13 views
5

Tôi có một chút mã cần phải ngồi trên máy chủ Windows 2003 và chạy mỗi phút.Mức độ đáng tin cậy của trình lập lịch biểu tác vụ windows để lập lịch để chạy nhiều lần?

Cách được đề xuất để xử lý vấn đề này là gì? Là nó ok để thiết kế nó như là một dịch vụ giao diện điều khiển và chỉ có nhiệm vụ lên lịch đánh nó bao giờ phút? (Liệu điều đó thậm chí có thể?) Tôi có nên hút nó lên và viết nó như một dịch vụ cửa sổ không?

Trả lời

12

Vì nó cần chạy mỗi phút, tôi khuyên bạn nên viết một Dịch vụ Windows. Nó không phải là rất phức tạp, và nếu bạn không bao giờ làm điều này trước đây, nó sẽ là tuyệt vời cho bạn để tìm hiểu làm thế nào nó được thực hiện.

Gọi nhiệm vụ được lên lịch mỗi phút không phải là điều tôi muốn giới thiệu.

+0

Tại sao bạn đề xuất dịch vụ Windows thay vì lập lịch tác vụ nếu nó chạy mỗi phút? Điều gì làm cho bạn đi cho tùy chọn đó? –

4

Tôi sẽ nói hút nó lên và viết nó như một dịch vụ Windows. Tôi đã không tìm thấy các tác vụ được lên lịch để rất đáng tin cậy và khi nó không chạy, tôi vẫn chưa tìm được cách dễ dàng để tìm hiểu lý do tại sao nó không có.

+2

Nhật ký sự kiện nên cho biết lý do tại sao nó không có. –

+1

@jeffamaphone "nên" là từ khóa. Tôi cũng đã tìm thấy các tác vụ được lên lịch không đáng tin cậy, thường không để lại dấu vết nào của một lần chạy thử trong nhật ký sự kiện. –

2

nếu bạn cần có nó chạy mỗi phút, tôi sẽ xây dựng nó như một dịch vụ cửa sổ. Tôi sẽ không sử dụng lịch trình cho bất cứ điều gì ít hơn một nhiệm vụ hàng ngày.

2

Tôi sẽ nói rằng nó phụ thuộc vào những gì nó đang làm, nhưng nói chung tôi luôn ủng hộ việc có các lớp ít nhất. Nếu bạn viết nó như là một dịch vụ console và sử dụng task scheduler thì bạn có hai nơi để duy trì tiếp tục.

Nếu bạn viết nó như là một dịch vụ cửa sổ thì bạn chỉ có một nơi ít hơn để kiểm tra trong trường hợp có gì đó không ổn.

0

Tôi đồng ý, thật lãng phí nỗ lực để tạo thậm chí một bảng điều khiển có thể thực thi và lập lịch biểu để chạy mỗi phút. Tôi sẽ đề xuất khám phá một cái gì đó như Quartz.Net. Bằng cách đó bạn có thể tạo một công việc đơn giản và lên lịch để chạy mỗi phút.

+1

Có vẻ như bạn đang chống lại ý tưởng lên kế hoạch cho một nhiệm vụ để chạy mỗi phút ... nhưng liệu ý tưởng đó có thực hiện được thông qua Quartz.Net không? Tui bỏ lỡ điều gì vậy? –

1

Điểm khác duy nhất để xem xét, là nếu bạn đang làm việc liên quan đến một số loại tương tác cơ sở dữ liệu, hãy cân nhắc xem xét các dịch vụ tích hợp/lập lịch được cung cấp bởi cơ sở dữ liệu của bạn. Ví dụ, việc tạo một gói SSIS cho dịch vụ liên quan đến SQL Server của bạn có vẻ hơi quá mức, nhưng nó có thể được tích hợp độc đáo với môi trường và sẽ có các cơ chế kiểm tra lỗi/ghi nhật ký riêng.

3

Nhiệm vụ theo lịch trình của Windows khá đáng tin cậy cho mục đích của chúng tôi và chúng tôi ưu tiên chúng trong hầu hết các trường hợp trên Windows Services do dễ cài đặt và các tính năng khôi phục nâng cao. Bản chất của dịch vụ cửa sổ có thể sẽ trở thành một vấn đề nếu một phần của mã được viết kết thúc bằng việc bị khóa hoặc lặp lại trong một đoạn mã mà nó không nên có. Chúng tôi thường viết mã của chúng tôi trong một thời trang tương tự như sau

Init(); 
Run(); 
CleanUp(); 

Sau đó, như một phần của Scheduled Task chúng tôi đặt một giới hạn thời gian trên bao lâu quá trình này có thể chạy và có nó giết chết quá trình nếu nó chạy lâu hơn. Nếu chúng ta có một đoạn mã đang gặp rắc rối thì Task Scheduled sẽ giết nó và quá trình sẽ bắt đầu trong phút tiếp theo.

2

Trong khi tìm kiếm trợ giúp dịch vụ đã lên lịch, tôi đã xem qua rất tốt article by Jon Galloway.

Có nhiều phụ kiện khác nhau nếu dịch vụ cửa sổ được sử dụng cho tác vụ đã lên lịch. Tôi đồng ý với nó. Tôi sẽ đề nghị sử dụng Task Scheduled, đơn giản trong thực hiện. Vui lòng tham khảo detailed information of implementing the task scheduler. Hy vọng thông tin này giúp hoàn thiện phương pháp triển khai.