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

Antwort per Email an