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 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 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 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 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
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())