Đúng; nhưng trước tiên hãy sửa chương trình lỗi của bạn trước khi xử lý với systemd.
MariusMatutiae hoàn toàn chính xác. Bạn có một vấn đề với chương trình của bạn. Nó bế tắc. Đấu tranh với systemd không phải là câu trả lời. Tốt nhất, đó là một sự xao lãng. Sửa chương trình của bạn để nó không bị hỏng. Hướng năng lượng của bạn vào điều đúng đắn.
Điều đó nói rằng, những người khác sẽ đến đây vì tiêu đề câu hỏi, chứ không phải là câu hỏi thích hợp. Vì lợi ích của họ, đây là câu trả lời cho tiêu đề, bỏ qua câu hỏi thích hợp:
Có, systemd có thể giám sát các mons và tự động khởi động lại chúng nếu chúng ngừng nói. Không chỉ là bất kỳ người già nào, mặc dù. Như mvp lưu ý, không có cách nào để biết rằng một dmon đã bị treo (trong vũ trụ này, nơi mà vấn đề tạm dừng là không thể giải quyết được, ít nhất là). Cả systemd và bất kỳ chương trình máy tính nào khác đều không có khả năng suy luận từ đầu rằng một số chương trình ngẫu nhiên ném vào chúng đã bế tắc, hoặc đi vào một vòng lặp vô hạn, hoặc bất cứ điều gì. Điều tốt nhất mà bạn sẽ nhận được ở đây là phát hiện ra rằng một người đã không thực hiện thao tác "nhịp tim" thường xuyên trong khoảng thời gian cần thiết.
Do đó, các lợi ích của các khả năng theo dõi của systemd phải được viết để nói một giao thức dành riêng cho systemd, giao thức sd_notify. Điều này làm phức tạp mã dæmon một chút. Điều đó còn phức tạp hơn nữa bởi vì các dons nên, nếu được viết đúng, hãy kiểm tra xem chúng có được gọi với chức năng watchdog hay không.
Một người nói giao thức này sử dụng khả năng theo dõi của systemd
- Phải kiểm tra
WATCHDOG_USEC
biến môi trường;
- Phải gọi sd_notify () liên tục và thường xuyên, trong suốt vòng đời của nó, với
WATCHDOG=1
tùy chọn được đặt, trong khoảng thời gian khoảng WATCHDOG_USEC
/ 2 ("USEC" là viết tắt của micro giây);
- Phải
Type=notify
đặt trong tập tin đơn vị của nó;
- Nên đặt
NotifyAccess=main
(hoặc =all
) trong tập tin đơn vị của nó;
- Phải có
WatchdogSec=
giây đặt trong tập tin đơn vị của nó.
- Liên kết phải liên kết với
libsystemd-daemon.so
Nếu bạn muốn biết chi tiết về mã hóa này, sau khi đọc hướng dẫn, hãy đảm bảo rằng bạn đi đến StackExchange đúng. Đây là SuperUser. StackOverflow ở đằng kia .
đọc thêm
for(;;) do_something();
nào?