From 70feea48f885b14dfaa6dc570d350cdad47dd8d2 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 9 Apr 2014 12:12:12 +0200 Subject: [PATCH] main: add -q/-Q options to set clock/print offset once and exit --- chrony.texi.in | 6 ++++++ chronyd.8.in | 8 ++++++++ main.c | 18 +++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/chrony.texi.in b/chrony.texi.in index 255b15e..3928e8a 100644 --- a/chrony.texi.in +++ b/chrony.texi.in @@ -1026,6 +1026,12 @@ system clock last time the computer was on. @item -u When this option is used, chronyd will drop root privileges to the specified user. So far, it works only on Linux when compiled with capabilities support. +@item -q +When run in this mode, @code{chronyd} will set the system clock once +and exit. It will not detach from the terminal. +@item -Q +This option is similar to `-q', but it will only print the offset and +not correct the clock. @item -v This option displays @code{chronyd's} version number to the terminal and exits. diff --git a/chronyd.8.in b/chronyd.8.in index 63eaab8..5d2e3c5 100644 --- a/chronyd.8.in +++ b/chronyd.8.in @@ -103,6 +103,14 @@ computer was on. When this option is used, chronyd will drop root privileges to the specified user. So far, it works only on Linux when compiled with capabilities support. .TP +.B \-q +When run in this mode, chronyd will set the system clock once +and exit. It will not detach from the terminal. +.TP +.B \-Q +This option is similar to \fB\-q\fR, but it will only print the offset and +not correct the clock. +.TP .B \-v This option displays \fBchronyd\fR's version number to the terminal and exits .TP diff --git a/main.c b/main.c index 825c18b..6c6b3ee 100644 --- a/main.c +++ b/main.c @@ -148,6 +148,12 @@ post_init_ntp_hook(void *anything) RTC_StartMeasurements(); RCL_StartRefclocks(); + + /* Special modes can end only when sources update their reachability. + Give up immediatelly if there are no sources. */ + if (ref_mode != REF_ModeNormal && !SRC_ReadNumberOfSources()) { + REF_SetUnsynchronised(); + } } /* ================================================== */ @@ -157,6 +163,8 @@ reference_mode_end(int result) { switch (ref_mode) { case REF_ModeNormal: + case REF_ModeUpdateOnce: + case REF_ModePrintOnce: exit_status = !result; SCH_QuitProgram(); break; @@ -363,6 +371,14 @@ int main debug++; nofork = 1; system_log = 0; + } else if (!strcmp("-q", *argv)) { + ref_mode = REF_ModeUpdateOnce; + nofork = 1; + system_log = 0; + } else if (!strcmp("-Q", *argv)) { + ref_mode = REF_ModePrintOnce; + nofork = 1; + system_log = 0; } else if (!strcmp("-4", *argv)) { address_family = IPADDR_INET4; } else if (!strcmp("-6", *argv)) { @@ -455,7 +471,7 @@ int main /* From now on, it is safe to do finalisation on exit */ initialised = 1; - if (CNF_GetInitSources() > 0) { + if (ref_mode == REF_ModeNormal && CNF_GetInitSources() > 0) { ref_mode = REF_ModeInitStepSlew; }