Verständnisfrage socket activation

Andreas Roth <[email protected]> Tue, 30 Jan 2024 23:50:37 +0100
Newsgroups gmane.user-groups.linux.dresden
Message-ID <[email protected]>
Hallo zusammen,

Ich habe eine Verständnisfrage zur systemd socket activation. Szenario: ich habe eine Webanwendung - inklusive Webserver - implementiert (testwebserver tcp/80). 
Ich möchte, dass diese Anwendung gestartet wird, wenn ein Verbindungsaufbau zu tcp/80 gestartet wird.

my-www.service:
[Service]
User=root
Group=root
ExecStart=/usr/bin/testwebserver
#PrivateNetwork=true

my-www.socket:
[Socket]
ListenStream=80
BindIPv6Only=both

[Install]
WantedBy=sockets.target

systemctl start my-www.socket

Wenn ich nun mit z.b. curl auf port 80 zugreife, bekomme ich den Fehler

Jan 30 23:40:07 docker01 systemd[1]: my-www.socket: Failed with result 'service-start-limit-hit‘.

Jan 30 23:40:07 docker01 testwebserver[9105]: OSError: [Errno 98] Address already in use
Jan 30 23:40:07 docker01 systemd[1]: my-www.service: Main process exited, code=exited, status=1/FAILURE

Der testwebserver Dienst versucht sich auf port 80 zu binden, wo ja bereits der systemd läuft und fällt dann um. 

Frage1: Ich hatte das Beispiel: https://freedesktop.org/wiki/Software/systemd/DaemonSocketActivation/ vom nginx vorher geprüft und lief super. Ich weiss nicht so recht wo der Unterschied zu meinem Szenario ist. Ist der nginx socket-aware?! Was muss man hierfür implementieren?

 Frage2: ist es eigentlich möglich, den per socket activation gestarteten Dienst nach Inaktivität wieder zu stoppen? Ich hatte zwar nen ganzen Sack voll Parameter gefunden (https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html), aber irgendwie scheint nichts so richtig zu passen.. 

Danke und Gruss,

Andreas