main: support configuration commands on command line

If there are extra arguments on the chronyd command line, they will be
parsed as lines in a configuration file and the normal configuration file
will be ignored.
This commit is contained in:
Miroslav Lichvar 2014-04-09 15:12:53 +02:00
parent 4f3fb95981
commit 3edd3fe5a4
3 changed files with 27 additions and 3 deletions

View file

@ -971,6 +971,10 @@ entering the command
Information messages and warnings will be logged to syslog. Information messages and warnings will be logged to syslog.
If no configuration commands are specified on the command line,
@code{chronyd} will read the commands from the configuration file
(default @file{@SYSCONFDIR@/chrony.conf}).
The command line options supported are as follows: The command line options supported are as follows:
@table @code @table @code
@ -1106,6 +1110,10 @@ Each command in the configuration file is placed on a separate line.
The following sections describe each of the commands in turn. The The following sections describe each of the commands in turn. The
directives can occur in any order in the file. directives can occur in any order in the file.
The configuration commands can also be specified directly on the
@code{chronyd} command line, each argument is parsed as a line and
the configuration file is ignored.
@menu @menu
* comments in config file:: How to write a comment * comments in config file:: How to write a comment
* acquisitionport directive:: Set port to use for initial time probes * acquisitionport directive:: Set port to use for initial time probes

View file

@ -4,7 +4,7 @@ chronyd \- chrony background daemon
.SH SYNOPSIS .SH SYNOPSIS
.B chronyd .B chronyd
[\fIOPTIONS\fR] [\fIOPTIONS\fR] [\fIconfiguration commands\fR]
.SH DESCRIPTION .SH DESCRIPTION
\fIchrony\fR is a pair of programs for maintaining the accuracy of computer \fIchrony\fR is a pair of programs for maintaining the accuracy of computer
@ -31,6 +31,9 @@ command:
Information messages and warnings will be logged to syslog. Information messages and warnings will be logged to syslog.
If no configuration commands are specified on the command line,
\fBchronyd\fR will read the commands from the configuration file
(default \fI@SYSCONFDIR@/chrony.conf\fR).
.SH OPTIONS .SH OPTIONS
A summary of the options supported by \fBchronyd\fR is included below. A summary of the options supported by \fBchronyd\fR is included below.

15
main.c
View file

@ -332,6 +332,7 @@ int main
int other_pid; int other_pid;
int lock_memory = 0, sched_priority = 0; int lock_memory = 0, sched_priority = 0;
int system_log = 1; int system_log = 1;
int config_args = 0;
LOG_Initialise(); LOG_Initialise();
@ -383,8 +384,12 @@ int main
address_family = IPADDR_INET4; address_family = IPADDR_INET4;
} else if (!strcmp("-6", *argv)) { } else if (!strcmp("-6", *argv)) {
address_family = IPADDR_INET6; address_family = IPADDR_INET6;
} else { } else if (*argv[0] == '-') {
LOG_FATAL(LOGF_Main, "Unrecognized command line option [%s]", *argv); LOG_FATAL(LOGF_Main, "Unrecognized command line option [%s]", *argv);
} else {
/* Process remaining arguments and configuration lines */
config_args = argc;
break;
} }
} }
@ -410,7 +415,15 @@ int main
DNS_SetAddressFamily(address_family); DNS_SetAddressFamily(address_family);
CNF_SetRestarted(restarted); CNF_SetRestarted(restarted);
/* Parse the config file or the remaining command line arguments */
if (!config_args) {
CNF_ReadFile(conf_file); CNF_ReadFile(conf_file);
} else {
do {
CNF_ParseLine(NULL, config_args - argc + 1, *argv);
} while (++argv, --argc);
}
/* Check whether another chronyd may already be running. Do this after /* Check whether another chronyd may already be running. Do this after
* forking, so that message logging goes to the right place (i.e. syslog), in * forking, so that message logging goes to the right place (i.e. syslog), in