Dịch vụ khởi động lại (một cách an toàn, sau đó nếu thất bại, mạnh mẽ) một vài quy trình khác nhau theo lịch trình


0

Tôi hiện đang chạy một dự án cá nhân về cơ bản giám sát một số thứ xung quanh đồng hồ. Một là quá trình sử dụng PhantomJS và cái còn lại quét một số API khác và gửi email nếu một số tình huống nhất định xảy ra.

Khi tất cả đã hoạt động, nó hoạt động chính xác như tôi muốn, nhưng thật không may, vào lúc này, cứ sau 2-3 ngày, một điều gì đó xảy ra bình thường trong đêm khuya và trình quét API chỉ bị đóng băng. Nó được viết bằng Python và cứ sau 3 giây lại chạy một lần và khi tôi kiểm tra nhật ký vào ngày hôm sau, không có sự cố, không có gì khác thường, nhưng vì một số lý do, nó đã ngừng chạy.

Khi tôi có thời gian, cuối cùng tôi sẽ khắc phục điều đó, nhưng vì nó chỉ xảy ra một lần sau 3 hoặc 4 ngày chạy, nên rất khó để tái tạo.

Đối với các công cụ PhantomJS ... cứ thỉnh thoảng, điều đó lại nổ tung. Một lần nữa, sẽ có việc dọn dẹp xảy ra ở đó, khắc phục những vấn đề này và có khả năng thay thế hoàn toàn.

Nhưng, trong khi chờ đợi, những gì tôi muốn yêu để làm, là khởi động lại những mỗi 24 giờ một ngày. Nó chắc chắn không hoàn hảo, nhưng với những gì tôi đang làm, nó sẽ giải quyết 99% các vấn đề của tôi.

Trong một thế giới hoàn hảo, tôi sẽ có một danh sách các quy trình, được ghép nối với một danh sách các PID. Cứ sau 24 giờ, tại một thời điểm tôi đã đăng ký, tôi muốn bộ điều khiển này chạy qua mọi bộ vi xử lý, gửi tín hiệu tiêu diệt thông thường (một trong số chúng nói chuyện với DB, vì vậy tôi muốn nó đóng an toàn, nếu có thể), sau đó đợi một khoảng thời gian đã đăng ký (giả sử là 30 giây), sau đó gửi sudo kill -9tín hiệu đến bộ xử lý sự cố nghiêm trọng, sau đó chạy lại lệnh khởi động.

Tôi đã xem xét có thể sử dụng Supervisorcho việc này, nhưng dường như (lúc đầu đọc lướt qua) để làm những gì tôi đang tìm kiếm.

Tôi hoàn toàn ổn với việc có thể sử dụng 2-3 chương trình khác nhau cho điều này (ví dụ: cron + giám sát + tập lệnh python), thay vì tìm kiếm một chương trình, nếu không có giải pháp duy nhất hoàn hảo.

Câu trả lời:


1

Giải pháp ưa thích của tôi là một kịch bản python điều khiển theo cron, chủ yếu đảm nhiệm việc bắt đầu các quy trình được giám sát khi chúng không chạy. Nó có thể tự lấy và lưu trữ các tiến trình con PID (và có thể là siêu dữ liệu khác nếu cần, ví dụ như dấu thời gian lặp lại OK cuối cùng) để sử dụng sau hoặc chỉ giám sát các tệp mà con xử lý tự tạo.

Trong lần lặp đầu tiên, tôi tận dụng các mẫu / mốc thời gian thất bại có thể dự đoán được và sửa đổi các quy trình con tương ứng để thoát ra một cách sạch sẽ sau một số lần lặp hoặc tổng thời gian chạy đã chỉ định. Quá trình giám sát sẽ chỉ khởi động lại chúng.

Cuối cùng, kịch bản giám sát có thể được tăng cường để phân tích sự tỉnh táo chi tiết hơn về các quy trình được giám sát đang chạy và tiêu diệt chúng nếu cần thiết. Ví dụ: bằng cách kiểm tra dấu thời gian lặp lại OK cuối cùng của họ, tôi đã đề cập ở trên. Điều này sẽ chăm sóc các mô hình thất bại ít dự đoán.

Để tiêu diệt thực tế các cấu trúc quy trình phức tạp hơn, bạn có thể muốn kiểm tra câu trả lời của tôi cho câu hỏi này: https://stackoverflow.com/questions/30780487/python-script-to-monitor- Process- and-sub- Processes .


"Số lần lặp được chỉ định của tổng thời gian chạy" - Bây giờ đó là điều mà tôi chưa bao giờ nghĩ sẽ kiểm tra cả. Có thể sẽ thực hiện điều đó ngay lập tức, trước khi đưa trình kiểm tra đầy đủ vào vị trí. Phần còn lại của câu trả lời của bạn chắc chắn là đầu của tôi đang ở đâu, và tôi sẽ đánh dấu nó chính xác nếu không có gì tốt hơn cho thấy. Cảm ơn Dân.
seaders

Ugh - Tôi đã có một lỗi đánh máy, nên là "số lần lặp được chỉ định ortổng thời gian chạy" ... Bất cứ khi nào thuận tiện hơn.
Dan Cornilescu

Bạn ok! Tôi đọc nó là "số lần lặp trong currentthời gian chạy", dù trong lúc nào đó có thể được ngụ ý, vẫn có ý nghĩa hoàn hảo. Tôi đã đăng nhập thời gian hiện tại và tổng thời gian đang chạy vì vậy đây chắc chắn là một công cụ hữu ích để kiểm tra xem liệu có mối tương quan nào không.
seaders
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.