Systemd unterstützt benutzerdefinierte Statusmeldungen, aber hier sind einige Voraussetzungen, die erfüllt sein müssen:
- Art der Dienstleistung sollte sein
notify
- Ihr Dienst muss systemd entweder über den
/run/systemd/notify
Socket oder durch Aufrufen von systemd- notify mit Ihrem aktuellen Dienststatus aktualisieren
Als Referenz können Sie Apache HTTPD auf Fedora überprüfen (möglicherweise dasselbe in anderen Distributionen, weiß nicht):
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"
Sie können sehen, dass Apache den Status als Gesamtanforderungen meldet : 8; Leerlauf / Beschäftigte 100/0
Wenn ich also strace
PID 4105 anhänge, können wir sehen, dass regelmäßig Statusaktualisierungen gesendet werden an 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
Sie können sehen, dass READY = 1 \ nSTATUS = Total Anfragen: 8 ... in Socket sendet/run/systemd/notify
Literatur-Empfehlungen
man systemd-notify
oder offizielle Dokumentation .
Beispiel: Dienststart in Systemd
systemctl status ...
, um den Status zu erhalten ...