Systemd hỗ trợ thông báo trạng thái tùy chỉnh, nhưng đây là một số điều kiện tiên quyết phải được đáp ứng:
- loại dịch vụ nên
notify
- dịch vụ của bạn phải cập nhật systemd với trạng thái dịch vụ hiện tại của bạn thông qua
/run/systemd/notify
ổ cắm hoặc bằng cách gọi systemd-notify
Để tham khảo, bạn có thể kiểm tra Apache HTTPD trên Fedora (có thể giống với các bản phát hành khác, không biết):
systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2017-10-06 15:21:07 CEST; 18h ago
Docs: man:httpd.service(8)
Process: 14424 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Main PID: 4105 (httpd)
Status: "Total requests: 8; Idle/Busy workers 100/0;Requests/sec: 0.000118; Bytes served/sec: 0 B/sec"
Bạn có thể thấy rằng Apache đang báo cáo trạng thái là Tổng số yêu cầu: 8; Công nhân nhàn rỗi / bận rộn 100/0
Vì vậy, khi tôi đính kèm strace
trên pid 4105, chúng ta có thể thấy rằng đó là định kỳ gửi các cập nhật trạng thái tới systemd
:
sudo strace -f -p 4105
wait4(-1, 0x7ffcfab4a25c, WNOHANG|WSTOPPED, NULL) = 0
select(0, NULL, NULL, NULL, {tv_sec=1, tv_usec=0}) = 0 (Timeout)
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 8
getsockopt(8, SOL_SOCKET, SO_SNDBUF, [212992], [4]) = 0
setsockopt(8, SOL_SOCKET, SO_SNDBUFFORCE, [8388608], 4) = 0
sendmsg(8, {msg_name={sa_family=AF_UNIX, sun_path="/run/systemd/notify"}, msg_namelen=21, msg_iov=[{iov_base="READY=1\nSTATUS=Total requests: 8"..., iov_len=110}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 110
close(8) = 0
wait4(-1, 0x7ffcfab4a25c, WNOHANG|WSTOPPED, NULL) = 0
Bạn có thể thấy rằng nó đang gửi READY = 1 \ nSTATUS = Tổng số yêu cầu: 8 ... vào ổ cắm/run/systemd/notify
Đề nghị đọc
man systemd-notify
hoặc tài liệu chính thức .
Ví dụ: Khởi động dịch vụ trong Systemd