nhận thông báo khi dịch vụ giám sát systemd rơi vào trạng thái không thành công


32

Tôi cần phải gửi tin nhắn mạng khi dịch vụ systemd tôi gặp sự cố hoặc bị treo (nghĩa là vào trạng thái không thành công; tôi theo dõi tình trạng bị treo bằng cách sử dụng WatchdogSec =). Tôi nhận thấy rằng systemd mới hơn có FailureAction =, nhưng sau đó thấy rằng điều này không cho phép các lệnh tùy ý, mà chỉ khởi động lại / tắt máy.

Cụ thể, tôi cần một cách để gửi một tin nhắn mạng khi systemd phát hiện chương trình bị sập và một cách khác khi phát hiện nó bị treo.

Tôi hy vọng câu trả lời tốt hơn là "phân tích nhật ký" và tôi cần một cái gì đó có thời gian phản hồi gần như ngay lập tức, vì vậy tôi không nghĩ cách tiếp cận bỏ phiếu là tốt; nó nên là một cái gì đó được kích hoạt bởi sự kiện xảy ra.


Bạn có thể vui lòng cung cấp một ví dụ (thậm chí không hoạt động) về những gì bạn đang cố gắng để đạt được?
dawud

Bạn có thể vui lòng chỉnh sửa câu hỏi của bạn để thêm thông tin này thay vì thêm nó trong một bình luận? :)
dawud 27/05/2015

Câu trả lời:


31

Các đơn vị systemd hỗ trợ OnFailure sẽ kích hoạt một đơn vị (hoặc nhiều hơn) khi thiết bị bị lỗi. Bạn có thể đặt một cái gì đó như

 OnFailure=notify-failed@%n

Và sau đó tạo notify-failed@.servicedịch vụ nơi bạn có thể sử dụng trình xác định được yêu cầu (có thể bạn sẽ muốn ít nhất% i) để khởi chạy tập lệnh hoặc lệnh sẽ gửi thông báo.

Bạn có thể xem một ví dụ thực tế trong http: //nắclightlabs.se/systemd.status.mail.on.unit.failure


5
Có một vài điều chỉnh cần thiết cho các hướng dẫn trên trang web được liên kết. Đầu tiên, notify%n.servicelà dư thừa, và sẽ dẫn đến notify@my-service.service.service. Thứ hai, %inên được sử dụng thay vì %Ihoặc tất cả các dấu gạch ngang trong tên sẽ được chuyển đổi thành dấu gạch chéo về phía trước.
orodbhen

4
Có cách nào để làm điều này cho nhiều hoặc tất cả các đơn vị, mà không sửa đổi các tập tin đơn vị của họ không?
Vladimir Panteleev

16

Chỉ là cách của tôi để thông báo:

/etc/systemd/system/notify-email@.service

[Unit]
Description=Sent email 

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mailx -Ssendwait -s "[SYSTEMD_%i] Fail" your_admin@company.blablabla'

thêm vào systemd:

systemctl enable /etc/systemd/system/notify-email@service

Tại các dịch vụ khác thêm:

[Unit]
OnFailure=notify-email@%i.service

Tải lại cấu hình:

systemctl daemon-reload

Có cách nào để tránh kích hoạt nó nhiều lần liên tiếp không? Trong một số tình huống nhận email 1K về một dịch vụ thất bại vào ban đêm và cố gắng lặp đi lặp lại để tự khởi động lại không hữu ích.
starbeamrainbowlabs

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.