Hi, I'm writing a network service that I would like systemd to manage. I'm trying to implement graceful restarts, and I'm interested in using the sd_listen/sd_notify interface. I have a basic POC but I'm interested in improving it.
What I want is something like this: * systemd sends SIGTERM to old process * old process sends the listen socket back to systemd using sd_notify, but retains file descriptors for client connections * systemd starts new process while old process is still running * new process gets the listen socket using sd_listen and starts handling new requests * old process continues to try to complete outstanding requests for client connections before exiting, but systemd will send SIGKILL if it doesn't complete within N seconds So what's unusual about this is that for some period of time there will be two processes for the same service running simultaneously. I've considered using SO_REUSEPORT but I don't see how to write a systemd policy that will let me run two instances of the same service at once in the manner I described. I also understand that I can avoid having two processes running at once if I write the code to transfer *all* sockets to systemd and back using the listen/notify interfaces, but I'm hoping that at least initially I can avoid doing this so I don't have to try to write a full client socket state serialization mechanism. What's the best way to do this? Thanks, Evan Klitzke _______________________________________________ systemd-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/systemd-devel
