2015-05-13 14 views
8

Tôi có một công việc dịch vụ UpStart có nhiều (~ 100) trường hợp cần phải được bắt đầu. Mỗi người trong số họ là một quá trình tài nguyên nặng làm rất nhiều đĩa đọc/ghi trong khi khởi động. Khi tất cả chúng bắt đầu hoặc hồi sinh cùng một lúc, chúng gây ra rắc rối do các yêu cầu đọc/ghi đĩa quá mức.Làm thế nào để giới hạn số lượng trường hợp UpStart có thể đồng thời bắt đầu hoặc respawn

Tôi cần một cách để giới hạn số lượng cá thể mà UpStart cố bắt đầu hoặc hồi sinh đồng thời. Ví dụ, có cách nào để UpStart giữ ngừng tung ra một thể hiện khác cho đến khi, nói 30 giây, sau khi khởi động hoặc respawning của một thể hiện đã bắt đầu?

+0

Nếu công việc của bạn là tập lệnh shell, bạn có thể chèn tạm dừng ngẫu nhiên để khi 10 bắt đầu cùng một lúc, mỗi lần tạm dừng một số giây và không gian khác nhau - hoặc bạn có thể có tất cả công việc khóa một tập tin nhất định khi khởi động chuyên sâu. Nhưng đó là một giải pháp shell scripting mà không có gì để làm với upstart. – Paul

+1

bạn có thể hiển thị tập lệnh mới nổi không? họ có phần nào giống nhau không? – FeedTheWeb

+0

Tôi nghĩ rằng phương pháp khóa được đề cập bởi @Paul là tuyệt vời. Nhưng điều đó sẽ yêu cầu thay đổi chính mã ứng dụng (btw, nó không phải là một kịch bản lệnh shell. Nó là một ứng dụng được biên dịch đầy đủ). Đáng ngạc nhiên là UpStart không có một số chức năng dựng sẵn để tự động giữ và xếp hàng các thể hiện dịch vụ (?). – scai

Trả lời

5

Bạn có thể bắt đầu chúng theo thứ tự bằng cách sử dụng

start on started otherUpstartService 
+0

Khi nào dịch vụ được UpStart coi là "bắt đầu"? Ngay sau khi quá trình được khởi chạy? Nếu nó quá sớm, nó có thể không giúp lan truyền tải ra trong thời gian. Nếu quá muộn, có thể có quá nhiều sự chậm trễ. – scai

1

Bạn có thể sử dụng pre-start hoặc post-stop tạm dừng sau mỗi công việc. Ví dụ: post-stop exec sleep 5

+0

Nếu tất cả chúng đều ngủ trong cùng một khoảng thời gian khi khởi động, thì vấn đề vẫn còn đó. Có cách nào để làm cho thời gian ngủ ngẫu nhiên không? – scai

+0

Bạn có thể làm một cái gì đó như 'ngủ sau exec $ (((RANDOM% 10) + 1))' để có được giấc ngủ từ 1 đến 10 giây. Chỉ cần thay đổi 10 thành bất kỳ số nguyên nào khác để có phạm vi rộng hơn –

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