[systemd-devel] Antw: [EXT] [systemd‑devel] Is it possible to let systemd create a listening socket and yet be able to have that socket activate nothing, at least temporarily?
Ulrich Windl
Ulrich.Windl at rz.uni-regensburg.de
Tue Oct 18 12:43:52 UTC 2022
Wouldn't the most logical solution be?: Integrate that backup facility in your
daemon (like before terminating).
>>> Klaus Ebbe Grue <grue at di.ku.dk> schrieb am 07.10.2022 um 09:24 in
Nachricht
<91a90e97f41a4da3b7f716727262de84 at di.ku.dk>:
> Hi systemd‑devel,
>
> I have a user question which I take the liberty to send here since "about
> systemd‑devel" says "... it's also OK to direct user questions to this
mailing
> list ...".
>
> I have a daemon, /usr/bin/mydaemon, which listens on one and only one TCP
> port, say 9999, and which does no more than communicating over 9999 and
> creating, reading, writing and deleting files in /home/me/mydaemon/.
>
> Mydaemon leaves it to systemd to create a socket which listens at 9999.
>
> It is unimportant whether or not mydaemon is started at boot and it is also
> unimportant whether or not mydaemon is socket activated. As long as it is at
> least one of the two.
>
> Now I want to upgrade mydaemon to a new version using a script, without race
> conditions and without closing the listening socket. I want the listening
> socket to stay open since otherwise there can be a one minute interval
during
> which it is impossible to reopen 9999.
>
> If it is just a clean upgrade, the script could replace /usr/bin/mydaemon,
> then stop mydaemon. If the daemon is socket activated there is no more to
do.
> If the daemon is activated only on boot then the script must end up
> restarting mydaemon.
>
> But now I want to do some more while mydaemon is not running. It could be
> that my script should take a backup of /home/me/mydaemon/ in case things go
> wrong. It could be the script should translate some file in
> /home/me/mydaemon/ to some new format required by the new mydaemon or
> whatever.
>
> So I need to stop mydaemon in such a way that mydaemon cannot wake up while
> my script fiddles with /home/me/mydaemon/.
>
> According to https://0pointer.de/blog/projects/three‑levels‑of‑off it seems
> that that was possible in 2011: just do "systemctl disable
mydaemon.service".
> But when I try that, mydaemon still wakes up if I connect to 9999 using eg
> netcat.
>
> I have also tried to mask mydaemon. But if I then connect to 9999 using
> netcat, then netcat gets kicked of. And if I try again then 9999 is no
longer
> listening.
>
> QUESTION: Is it possible to let systemd create a listening socket and yet be
> able to have that socket activate nothing, at least temporarily?
>
> Cheers,
> Klaus
More information about the systemd-devel
mailing list