| [chrony-dev] Re: [PATCH] Add -N option for s6-style service readiness notification |
[ Thread Index |
Date Index
| More chrony.tuxfamily.org/chrony-dev Archives
]
- To: chrony-dev@xxxxxxxxxxxxxxxxxxxx
- Subject: [chrony-dev] Re: [PATCH] Add -N option for s6-style service readiness notification
- From: Emery Hemingway <emery@xxxxxxxxxxxxxxxx>
- Date: Thu, 9 Apr 2026 12:48:08 +0000
- Cc: Emery Hemingway <emery@xxxxxxxxxxxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=informatics.coop; s=jankyemail; t=1775739014; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FE9wpwSoL6P0qceQiFO0pkAzzPkFVJNfyC2l3PrmOxg=; b=MWOJL3hJu+2tGzJGN2lr29ZJcpn/BHAPp98825hELQ35Jhmvecve9wduWn1Jt9boetn6bs F5MlDNzwZ5zZTEZIgREaPeVoEoPRVdAZ242BeCGJQWAwPyTnYcvgA+j1f9ZpPNFvsPt+K7 SPfG9ILnD0lp0e6cPy0ZvcSDDlUdAe1f50y0YZyKkRtUJlVyvQ5SufKseLdxVNdntNiHCT RkxgYMlA00PJXwBwbe2JVnamAO9dT2GFJ8IKlLanySpQThmAfrNqXIpwFOL9drK2gF3zrw AOqVmPJvA9zqaDKQ9sGL4A7LcCmgefa6wf8FIAJ+hxe9A8k0pQEPAlZBzhfRnQ==
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.