Nhận thông báo từ người giám sát khi một công việc thoát ra


36

Có cách nào supervisordcó thể tự động khởi động lại một công việc thất bại / đã thoát / chấm dứt gửi cho tôi một email thông báo với một bãi chứa x dòng cuối cùng của tệp nhật ký không?

Câu trả lời:


49

Có một plugin gọi là superlance.

Bạn cài đặt nó với pip install superlancehoặc tải xuống tại: http://pypi.python.org/pypi/superlance

Điều tiếp theo bạn làm là bạn đi vào supervisord.confvà thêm các dòng sau:

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE

Điều này nên được theo sau bởi một "cập nhật giám sát". Khi một quá trình "thoát", bây giờ bạn sẽ nhận được một thông báo được gửi đến email1@example.com.

Nếu bạn chỉ muốn nghe một số ứng dụng đã chọn, bạn có thể đổi lấy -amột -p program1hoặc nếu đó là một group1:program2ví dụ nhóm Một sẽ là

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2  -m email1@example.com
events=PROCESS_STATE

Về khởi động lại tự động: bạn nên đảm bảo rằng nó autorestartđược đặt thành true(nó được đặt thành unexpectedmặc định). Bằng cách này, gói sẽ được khởi động lại 3 lần. Nếu sau đó nó vẫn thoát, nó bỏ cuộc, nhưng bạn có thể thay đổi điều đó với startretries.

Chương trình ví dụ:

[program:cat]
command=/bin/cat
autorestart=true
startretries=10

Mặc dù đã không hoạt động trong một vài năm, chủ đề này vẫn còn hiệu lực - Tôi mới thử nghiệm superlance 1.0.0 (ngày oct 2016) với người giám sát 3.1.4 (CentOS7) và vụ tai nạn hoạt động tốt.
David Ramirez

0

Tôi đã thử cài đặt superlance và chạy crashmail như thế này:

sudo apt-get install python-pip
sudo pip install superlance

sau khi tôi làm:

sudo nano /etc/supervisor/supervisord.conf

và sau khi tôi thêm:

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE

và tôi không nhận được gì cả ....

Tệp tin sập của tôi là:

#!/usr/bin/python

-- coding: utf-8 --
import re
import sys

from superlance.crashmail import main

if name == 'main':
sys.argv[0] = re.sub(r'(-script.pyw?|.exe)?$', '', sys.argv[0])
sys.exit(main())
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.