Add and document options to allow rpc.lockd and rpc.statd to run in the
foreground. This allows a separate process to monitor when and how those programs exit. That process can then restart them if needed. Submitted by: Alex Burlyga Reviewed by: bcr, imp MFC after: 1 week Sponsored by: Panasas Differential Revision: https://reviews.freebsd.org/D22474
This commit is contained in:
parent
9c770a27ce
commit
90e43b446d
@ -120,6 +120,7 @@ main(int argc, char **argv)
|
||||
char *endptr, **hosts_bak;
|
||||
struct sigaction sigalarm;
|
||||
int grace_period = 30;
|
||||
int foreground = 0;
|
||||
struct netconfig *nconf;
|
||||
int have_v6 = 1;
|
||||
int maxrec = RPC_MAXDATASIZE;
|
||||
@ -127,7 +128,7 @@ main(int argc, char **argv)
|
||||
int attempt_cnt, port_len, port_pos, ret;
|
||||
char **port_list;
|
||||
|
||||
while ((ch = getopt(argc, argv, "d:g:h:p:")) != (-1)) {
|
||||
while ((ch = getopt(argc, argv, "d:Fg:h:p:")) != (-1)) {
|
||||
switch (ch) {
|
||||
case 'd':
|
||||
debug_level = atoi(optarg);
|
||||
@ -136,6 +137,9 @@ main(int argc, char **argv)
|
||||
/* NOTREACHED */
|
||||
}
|
||||
break;
|
||||
case 'F':
|
||||
foreground = 1;
|
||||
break;
|
||||
case 'g':
|
||||
grace_period = atoi(optarg);
|
||||
if (!grace_period) {
|
||||
@ -422,7 +426,7 @@ main(int argc, char **argv)
|
||||
* Note that it is NOT sensible to run this program from inetd - the
|
||||
* protocol assumes that it will run immediately at boot time.
|
||||
*/
|
||||
if (daemon(0, debug_level > 0)) {
|
||||
if ((foreground == 0) && daemon(0, debug_level > 0)) {
|
||||
err(1, "cannot fork");
|
||||
/* NOTREACHED */
|
||||
}
|
||||
@ -844,7 +848,7 @@ void
|
||||
usage()
|
||||
{
|
||||
errx(1, "usage: rpc.lockd [-d <debuglevel>]"
|
||||
" [-g <grace period>] [-h <bindip>] [-p <port>]");
|
||||
" [-F] [-g <grace period>] [-h <bindip>] [-p <port>]");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -29,7 +29,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd November 2, 2007
|
||||
.Dd November 21, 2019
|
||||
.Dt RPC.LOCKD 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -38,6 +38,7 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl d Ar debug_level
|
||||
.Op Fl F
|
||||
.Op Fl g Ar grace period
|
||||
.Op Fl h Ar bindip
|
||||
.Op Fl p Ar port
|
||||
@ -70,6 +71,17 @@ in the generation of one log line per protocol operation.
|
||||
Higher
|
||||
debug levels can be specified, causing display of operation arguments
|
||||
and internal operations of the daemon.
|
||||
.It Fl F
|
||||
Run
|
||||
.Nm
|
||||
in the foreground, rather than going into daemon mode.
|
||||
This is useful if some other process uses
|
||||
.Xr fork 2
|
||||
and
|
||||
.Xr exec 3
|
||||
to run
|
||||
.Nm ,
|
||||
and wants to monitor when and how it exits.
|
||||
.It Fl g
|
||||
The
|
||||
.Fl g
|
||||
|
@ -29,7 +29,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd November 1, 2007
|
||||
.Dd November 21, 2019
|
||||
.Dt RPC.STATD 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -38,6 +38,7 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl d
|
||||
.Op Fl F
|
||||
.Op Fl h Ar bindip
|
||||
.Op Fl p Ar port
|
||||
.Sh DESCRIPTION
|
||||
@ -71,6 +72,17 @@ These messages are logged with level
|
||||
LOG_DEBUG and facility LOG_DAEMON.
|
||||
Error conditions are logged irrespective
|
||||
of this option, using level LOG_ERR.
|
||||
.It Fl F
|
||||
Run
|
||||
.Nm
|
||||
in the foreground, rather than going into daemon mode.
|
||||
This is useful if some other process uses
|
||||
.Xr fork 2
|
||||
and
|
||||
.Xr exec 3
|
||||
to run
|
||||
.Nm ,
|
||||
and wants to monitor when and how it exits.
|
||||
.It Fl h Ar bindip
|
||||
Specify specific IP addresses to bind to.
|
||||
This option may be specified multiple times.
|
||||
|
@ -89,15 +89,19 @@ main(int argc, char **argv)
|
||||
char *endptr;
|
||||
char **hosts_bak;
|
||||
int have_v6 = 1;
|
||||
int foreground = 0;
|
||||
int maxrec = RPC_MAXDATASIZE;
|
||||
int attempt_cnt, port_len, port_pos, ret;
|
||||
char **port_list;
|
||||
|
||||
while ((ch = getopt(argc, argv, "dh:p:")) != -1)
|
||||
while ((ch = getopt(argc, argv, "dFh:p:")) != -1)
|
||||
switch (ch) {
|
||||
case 'd':
|
||||
debug = 1;
|
||||
break;
|
||||
case 'F':
|
||||
foreground = 1;
|
||||
break;
|
||||
case 'h':
|
||||
++nhosts;
|
||||
hosts_bak = hosts;
|
||||
@ -288,7 +292,11 @@ main(int argc, char **argv)
|
||||
|
||||
/* Note that it is NOT sensible to run this program from inetd - the */
|
||||
/* protocol assumes that it will run immediately at boot time. */
|
||||
daemon(0, 0);
|
||||
if ((foreground == 0) && daemon(0, 0) < 0) {
|
||||
err(1, "cannot fork");
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
openlog("rpc.statd", 0, LOG_DAEMON);
|
||||
if (debug) syslog(LOG_INFO, "Starting - debug enabled");
|
||||
else syslog(LOG_INFO, "Starting");
|
||||
@ -618,7 +626,7 @@ clearout_service(void)
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "usage: rpc.statd [-d] [-h <bindip>] [-p <port>]\n");
|
||||
fprintf(stderr, "usage: rpc.statd [-d] [-F] [-h <bindip>] [-p <port>]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user