Invert the meaning of -S (added in r247405) and document its meaning. Also,
don't carp about the watchdog command taking too long until after the watchdog has been patted, and don't carp via warnx(3) unless -S is set since syslog(3) already logs to standard error otherwise. Discussed with: alfred Reviewed by: alfred Approved by: emaste (co-mentor)
This commit is contained in:
parent
7f7fc25b5a
commit
8d7ad01f94
@ -27,7 +27,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd September 2, 2013
|
||||
.Dd March 5, 2013
|
||||
.Dt WATCHDOGD 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -35,7 +35,7 @@
|
||||
.Nd watchdog daemon
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl dnw
|
||||
.Op Fl dnSw
|
||||
.Op Fl -debug
|
||||
.Op Fl -softtimeout
|
||||
.Op Fl -softtimeout-action Ar action
|
||||
@ -126,6 +126,12 @@ When this option is specified,
|
||||
.Nm
|
||||
will not fork into the background at startup.
|
||||
.Pp
|
||||
.It Fl S
|
||||
Do not send a message to the system logger when the watchdog command takes
|
||||
longer than expected to execute.
|
||||
The default behaviour is to log a warning via the system logger with the
|
||||
LOG_DAEMON facility, and to output a warning to standard error.
|
||||
.Pp
|
||||
.It Fl w
|
||||
Complain when the watchdog script takes too long.
|
||||
This flag will cause watchdogd to complain when the amount of time to
|
||||
|
@ -77,7 +77,7 @@ static int is_dry_run = 0; /* do not arm the watchdog, only
|
||||
report on timing of the watch
|
||||
program */
|
||||
static int do_timedog = 0;
|
||||
static int do_syslog = 0;
|
||||
static int do_syslog = 1;
|
||||
static int fd = -1;
|
||||
static int nap = 1;
|
||||
static int carp_thresh_seconds = -1;
|
||||
@ -125,12 +125,10 @@ main(int argc, char *argv[])
|
||||
|
||||
parseargs(argc, argv);
|
||||
|
||||
if (do_syslog) {
|
||||
if (do_syslog)
|
||||
openlog("watchdogd", LOG_CONS|LOG_NDELAY|LOG_PERROR,
|
||||
LOG_DAEMON);
|
||||
|
||||
}
|
||||
|
||||
rtp.type = RTP_PRIO_REALTIME;
|
||||
rtp.prio = 0;
|
||||
if (rtprio(RTP_SET, 0, &rtp) == -1)
|
||||
@ -234,8 +232,9 @@ static long
|
||||
watchdog_check_dogfunction_time(struct timespec *tp_start,
|
||||
struct timespec *tp_end)
|
||||
{
|
||||
struct timeval tv_start, tv_end, tv;
|
||||
struct timeval tv_start, tv_end, tv_now, tv;
|
||||
const char *cmd_prefix, *cmd;
|
||||
struct timespec tp_now;
|
||||
int sec;
|
||||
|
||||
if (!do_timedog)
|
||||
@ -257,16 +256,28 @@ watchdog_check_dogfunction_time(struct timespec *tp_start,
|
||||
}
|
||||
if (do_syslog)
|
||||
syslog(LOG_CRIT, "%s: '%s' took too long: "
|
||||
"%d.%06ld seconds >= %d seconds threshhold",
|
||||
"%d.%06ld seconds >= %d seconds threshold",
|
||||
cmd_prefix, cmd, sec, (long)tv.tv_usec,
|
||||
carp_thresh_seconds);
|
||||
warnx("%s: '%s' took too long: "
|
||||
"%d.%06ld seconds >= %d seconds threshhold",
|
||||
cmd_prefix, cmd, sec, (long)tv.tv_usec, carp_thresh_seconds);
|
||||
else
|
||||
warnx("%s: '%s' took too long: "
|
||||
"%d.%06ld seconds >= %d seconds threshold",
|
||||
cmd_prefix, cmd, sec, (long)tv.tv_usec,
|
||||
carp_thresh_seconds);
|
||||
|
||||
/*
|
||||
* Adjust the sleep interval again in case syslog(3) took a non-trivial
|
||||
* amount of time to run.
|
||||
*/
|
||||
if (watchdog_getuptime(&tp_now))
|
||||
return (sec);
|
||||
TIMESPEC_TO_TIMEVAL(&tv_now, &tp_now);
|
||||
timersub(&tv_now, &tv_start, &tv);
|
||||
sec = tv.tv_sec;
|
||||
|
||||
return (sec);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Main program loop which is iterated every second.
|
||||
*/
|
||||
@ -298,10 +309,10 @@ watchdog_loop(void)
|
||||
goto try_end;
|
||||
}
|
||||
|
||||
waited = watchdog_check_dogfunction_time(&ts_start, &ts_end);
|
||||
|
||||
if (failed == 0)
|
||||
watchdog_patpat(timeout|WD_ACTIVE);
|
||||
|
||||
waited = watchdog_check_dogfunction_time(&ts_start, &ts_end);
|
||||
if (nap - waited > 0)
|
||||
sleep(nap - waited);
|
||||
|
||||
@ -404,7 +415,7 @@ usage(void)
|
||||
{
|
||||
if (is_daemon)
|
||||
fprintf(stderr, "usage:\n"
|
||||
" watchdogd [-dnw] [-e cmd] [-I file] [-s sleep] [-t timeout]\n"
|
||||
" watchdogd [-dnSw] [-e cmd] [-I file] [-s sleep] [-t timeout]\n"
|
||||
" [-T script_timeout]\n"
|
||||
" [--debug]\n"
|
||||
" [--pretimeout seconds] [-pretimeout-action action]\n"
|
||||
@ -551,7 +562,7 @@ parseargs(int argc, char *argv[])
|
||||
nap = fetchtimeout(c, NULL, optarg);
|
||||
break;
|
||||
case 'S':
|
||||
do_syslog = 1;
|
||||
do_syslog = 0;
|
||||
break;
|
||||
case 't':
|
||||
p = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user