MFC r202668+r200806:
Don't consider non-existence of a PID file an error, we should be able to proceed anyway as this most likely mean that the process has been terminated. [1] Add a new option, -P, which reverts newsyslog(8) to the old behavior, which stops to proceed further, as it is possible that processes which fails to create PID file get screwed by rotation. [2] PR: bin/140397 Submitted by: Dan Lukes [1] Requested by: stas [2]
This commit is contained in:
parent
eb2e9eedcb
commit
4a32e61c71
@ -17,7 +17,7 @@
|
||||
.\" the suitability of this software for any purpose. It is
|
||||
.\" provided "as is" without express or implied warranty.
|
||||
.\"
|
||||
.Dd February 24, 2005
|
||||
.Dd January 19, 2010
|
||||
.Dt NEWSYSLOG 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -25,7 +25,7 @@
|
||||
.Nd maintain system log files to manageable sizes
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl CFNnrsv
|
||||
.Op Fl CFNPnrsv
|
||||
.Op Fl R Ar tagname
|
||||
.Op Fl a Ar directory
|
||||
.Op Fl d Ar directory
|
||||
@ -169,6 +169,10 @@ This option is intended to be used with the
|
||||
or
|
||||
.Fl CC
|
||||
options when creating log files is the only objective.
|
||||
.It Fl P
|
||||
Prevent further action if we should send signal but the
|
||||
.Dq pidfile
|
||||
is empty or does not exist.
|
||||
.It Fl R Ar tagname
|
||||
Specify that
|
||||
.Nm
|
||||
|
@ -167,6 +167,7 @@ int needroot = 1; /* Root privs are necessary */
|
||||
int noaction = 0; /* Don't do anything, just show it */
|
||||
int norotate = 0; /* Don't rotate */
|
||||
int nosignal; /* Do not send any signals */
|
||||
int enforcepid = 0; /* If PID file does not exist or empty, do nothing */
|
||||
int force = 0; /* Force the trim no matter what */
|
||||
int rotatereq = 0; /* -R = Always rotate the file(s) as given */
|
||||
/* on the command (this also requires */
|
||||
@ -580,7 +581,7 @@ parse_args(int argc, char **argv)
|
||||
*p = '\0';
|
||||
|
||||
/* Parse command line options. */
|
||||
while ((ch = getopt(argc, argv, "a:d:f:nrsvCD:FNR:")) != -1)
|
||||
while ((ch = getopt(argc, argv, "a:d:f:nrsvCD:FNPR:")) != -1)
|
||||
switch (ch) {
|
||||
case 'a':
|
||||
archtodir++;
|
||||
@ -624,6 +625,9 @@ parse_args(int argc, char **argv)
|
||||
case 'N':
|
||||
norotate++;
|
||||
break;
|
||||
case 'P':
|
||||
enforcepid++;
|
||||
break;
|
||||
case 'R':
|
||||
rotatereq++;
|
||||
requestor = strdup(optarg);
|
||||
@ -1779,7 +1783,18 @@ set_swpid(struct sigwork_entry *swork, const struct conf_entry *ent)
|
||||
|
||||
f = fopen(ent->pid_file, "r");
|
||||
if (f == NULL) {
|
||||
warn("can't open pid file: %s", ent->pid_file);
|
||||
if (errno == ENOENT && enforcepid == 0) {
|
||||
/*
|
||||
* Warn if the PID file doesn't exist, but do
|
||||
* not consider it an error. Most likely it
|
||||
* means the process has been terminated,
|
||||
* so it should be safe to rotate any log
|
||||
* files that the process would have been using.
|
||||
*/
|
||||
swork->sw_pidok = 1;
|
||||
warnx("pid file doesn't exist: %s", ent->pid_file);
|
||||
} else
|
||||
warn("can't open pid file: %s", ent->pid_file);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1790,7 +1805,7 @@ set_swpid(struct sigwork_entry *swork, const struct conf_entry *ent)
|
||||
* has terminated, so it should be safe to rotate any
|
||||
* log files that the process would have been using.
|
||||
*/
|
||||
if (feof(f)) {
|
||||
if (feof(f) && enforcepid == 0) {
|
||||
swork->sw_pidok = 1;
|
||||
warnx("pid file is empty: %s", ent->pid_file);
|
||||
} else
|
||||
|
Loading…
x
Reference in New Issue
Block a user