Có cách nào supervisord
có thể tự động khởi động lại một công việc thất bại / đã thoát / chấm dứt và 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ó cách nào supervisord
có thể tự động khởi động lại một công việc thất bại / đã thoát / chấm dứt và 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:
Có một plugin gọi là superlance.
Bạn cài đặt nó với pip install superlance
hoặ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.conf
và 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 -a
một -p program1
hoặc nếu đó là một group1:program2
ví 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 unexpected
mặ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
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())