<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 27, 2024 at 9:35 AM Steve Traylen <<a href="mailto:steve.traylen@cern.ch">steve.traylen@cern.ch</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
Hi,</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
I have a old legacy service that's a bit odd in that it was previously launched by xinetd but is weird in that:</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
After an initial quite quick auth and set up a daemon is forked of to run the much longer process.</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
Setting this up with a socket me.socket and me@.service does not work quite right for us.</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
In particular I want the socket to close once the fork happens.</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
If the service is Type=forking things do work but socket is persisted - that's not great for thing doing the original submission. It expects the socket to be short lived.</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
Only workaround I have which is rubbish for obvious reasons is to use the service with Type=simple, KillMode=None to leave the forked process running.</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
Anyway to persuade the socket service to close earlier.</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
<br>
</div>
<div style="font-family:inherit;font-size:inherit;color:rgb(0,0,0);background-color:transparent">
Presumably in the xinetd world xinetd was oblivious to this forked process.</div></div></blockquote><div><br></div><div>Well, xinetd predates the whole idea of per-service process tracking using cgroups or whatever else; it only knows about its immediate children.<br></div><div><br></div><div>But even in the systemd world, if you have xinetd.service, everything spawned by xinetd is still just part of xinetd.service and can continue running as long as xinetd (the main process of the .service) keeps running.</div><div><br></div><div>So I would say just keep using xinetd for it? It's definitely not a good fit for systemd .socket as you've found out, but it can continue to run under (x)inetd or a custom `systemd-socket-activate` service (that's mainly a CLI tool for testing but it would work as a service too).<br></div></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mantas Mikulėnas</div></div></div>