[chrony-dev] Re: [PATCH] Add -N option for s6-style service readiness notification

[ Thread Index | Date Index | More chrony.tuxfamily.org/chrony-dev Archives ]


In this notification scheme a service supervisor creates a pipe
and passes the write file descriptor to chrony. When chronyd is
initialised it writes a newline to the descriptor and the
supervisor is informed that chronyd has successfully started and
is in a ready state.

https://skarnet.org/software/s6/notifywhenup.html
---
 doc/chronyd.adoc |  5 +++++
 main.c           | 13 ++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/doc/chronyd.adoc b/doc/chronyd.adoc
index be34c96..6921785 100644
--- a/doc/chronyd.adoc
+++ b/doc/chronyd.adoc
@@ -201,6 +201,11 @@ still track its offset and frequency relative to the estimated true time. This
 option allows *chronyd* to be started without the capability to adjust or set
 the system clock (e.g. in some containers) to operate as an NTP server.
 
+*-N* _fd_::
+This option specifies a file descriptor that *chronyd* will write a newline
+to after it is fully initialised. This is to notify a service supervisor that
+*chronyd* is in a ready state.
+
 *-v*, *--version*::
 With this option *chronyd* will print version number to the terminal and exit.
 
diff --git a/main.c b/main.c
index 9c90b58..70a579e 100644
--- a/main.c
+++ b/main.c
@@ -70,6 +70,8 @@ static int exit_status = 0;
 
 static int reload = 0;
 
+static int notify_fd = 0;
+
 static REF_Mode ref_mode = REF_ModeNormal;
 
 /* ================================================== */
@@ -110,6 +112,11 @@ delete_pidfile(void)
 static void
 notify_system_manager(int start)
 {
+  if (start && notify_fd) {
+    write(notify_fd, "\n", 1);
+    close(notify_fd);
+  }
+
 #ifdef LINUX
   /* The systemd protocol is documented in the sd_notify(3) man page */
   const char *message, *path = getenv("NOTIFY_SOCKET");
@@ -454,6 +461,7 @@ print_help(const char *progname)
              "  -P PRIORITY\tSet process priority (0)\n"
              "  -m\t\tLock memory\n"
              "  -x\t\tDon't control clock\n"
+             "  -N FD\tNotify supervisor\n"
              "  -v, --version\tPrint version and exit\n"
              "  -h, --help\tPrint usage and exit\n",
              progname, DEFAULT_CONF_FILE, DEFAULT_USER);
@@ -512,7 +520,7 @@ int main
   optind = 1;
 
   /* Parse short command-line options */
-  while ((opt = getopt(argc, argv, "46df:F:hl:L:mnpP:qQrRst:u:Uvx")) != -1) {
+  while ((opt = getopt(argc, argv, "46df:F:hl:L:mnN:pP:qQrRst:u:Uvx")) != -1) {
     switch (opt) {
       case '4':
       case '6':
@@ -541,6 +549,9 @@ int main
       case 'n':
         nofork = 1;
         break;
+      case 'N':
+        notify_fd = parse_int_arg(optarg);
+        break;
       case 'p':
         print_config = 1;
         user_check = 0;
-- 
2.52.0


-- 
To unsubscribe email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "unsubscribe" in the subject.
For help email chrony-dev-request@xxxxxxxxxxxxxxxxxxxx with "help" in the subject.
Trouble?  Email listmaster@xxxxxxxxxxxxxxxxxxxx.


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/