Wouldn't the most logical solution be?: Integrate that backup facility in your daemon (like before terminating). >>> Klaus Ebbe Grue <grue@xxxxxxxx> schrieb am 07.10.2022 um 09:24 in Nachricht <91a90e97f41a4da3b7f716727262de84@xxxxxxxx>: > 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