Duy trì 100 phiên bản chương trình đang chạy


12

Tôi hiện đang sử dụng giám sát để duy trì 100 phiên bản tập lệnh đang chạy cùng một lúc. Nếu có chết thì nó bắt đầu một cái mới.

Tuy nhiên, dường như đang gặp khó khăn trong việc duy trì số lượng lớn hơn (> 300 quy trình) và tôi đang tìm kiếm một sự thay thế. Monit dường như không làm những gì tôi muốn vì nó giám sát các tập lệnh riêng lẻ và dường như không thể dễ dàng xem 100 trường hợp của cùng một tập lệnh.

Bất kỳ đề xuất về một công cụ khác nhau tôi có thể sử dụng?


Các kịch bản này đang làm gì và tại sao bạn muốn nhiều trường hợp? Có phải họ đang được chạy với các đối số / môi trường khác nhau hoặc những gì?
psusi

1
Một kịch bản bash đơn giản sẽ làm việc? Một cái gì đó như ... đếm số lượng tiến trình tập lệnh đang chạy, nếu dưới 100, bắt đầu số lượng còn thiếu?
gabe.

3
Bạn đang cố gắng để thực hiện? Tại sao một số trong 300 quá trình chết? Có lẽ có một cách tốt hơn để hoàn thành nhiệm vụ của bạn, không phải là ít nhất là nếu 299 trường hợp tập lệnh đang chạy kém hơn 300, có gì đó không hoàn hảo với kiến ​​trúc ứng dụng của bạn. Khởi động lại các quá trình đã chết mà không hiểu tại sao chúng chết thường sẽ dẫn đến một cái chết khác và kết quả là phải chịu chi phí đáng kể.
msw

Tôi đang làm việc với một hệ thống cũ ở đây đang xử lý các URL và mỗi cần một luồng riêng (được viết bằng PHP). Vâng, kiến ​​trúc còn thiếu sót, nhưng vẫn phải làm việc với nó ... Làm việc trên một cái mới vào lúc này :)
jong

Câu trả lời:


1

Bạn có thể dùng:

ps h --ppid $$ | wc -l

để lấy số lượng tiến trình con từ tập lệnh bash (hãy nhớ điều này bao gồm ps). Vì vậy, nếu bạn muốn có 1000 quy trình, bạn kiểm tra xem liệu nó có trả về 1001 không. Nếu không kích hoạt chúng với:

cmd &

để chúng chạy như các phần tử con của tập lệnh hiện tại (và do đó được tính vào số đếm.) Sau đó, bạn có thể ngủ một lát, sau đó kiểm tra lại trong một vòng lặp mãi mãi. Một điều cần lưu ý là nếu bạn đang sinh ra các quy trình khác, bạn sẽ cần sửa đổi pslệnh để lọc các quy trình bạn muốn.

Lệnh đầu tiên đó là phần cốt lõi của câu đố, nó chỉ nên thêm một chút nữa cho đến khi bạn có kịch bản của mình.


0

Tôi sẽ sử dụng pgrep|wc -lhoặc một cái gì đó như thế trong một kịch bản shell đơn giản. Đợi một giây (hoặc ít hơn trên Linux nếu bạn muốn) giữa mỗi lần kiểm tra sleep.


0

Nếu tập lệnh của bạn chết và sẽ quay trở lại trình bao, bạn có thể sử dụng tập lệnh trình bao cho mỗi trường hợp:

while [ 1 == 1 ] ; do /path/to/script ; done

hoặc bạn viết một số trình bao bọc giả mạo các tập lệnh và sử dụng wait/waitpidđể bắt các quy trình chết.


1
Ít nhất tôi cũng sẽ ngủ ở đó cuối cùng chỉ trong trường hợp tập lệnh có một số điều kiện luôn bị lỗi (lát đã đầy, không thể đọc tệp cấu hình, v.v.) .. Nếu không, bạn có thể có 100 tiến trình đi vượn cho một lát CPU. Thêm vào đó - 100 * (quá trình bash + khởi động dấu chân đầu tiên của thất bại ứng dụng) == khả năng một lượng không tầm thường của ram)
synthesizerpatel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.