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