svn commit: r207587 - stable/7/usr.sbin/newsyslog
Xin LI
delphij at FreeBSD.org
Mon May 3 22:09:06 UTC 2010
Author: delphij
Date: Mon May 3 22:09:06 2010
New Revision: 207587
URL: http://svn.freebsd.org/changeset/base/207587
Log:
MFC r202668 and r200806 [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.
----
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.
PR: bin/140397
Submitted by: Dan Lukes <dan obluda cz>
Modified:
stable/7/usr.sbin/newsyslog/newsyslog.8
stable/7/usr.sbin/newsyslog/newsyslog.c
Directory Properties:
stable/7/usr.sbin/newsyslog/ (props changed)
stable/7/usr.sbin/newsyslog/newsyslog.conf.5 (props changed)
Modified: stable/7/usr.sbin/newsyslog/newsyslog.8
==============================================================================
--- stable/7/usr.sbin/newsyslog/newsyslog.8 Mon May 3 20:59:27 2010 (r207586)
+++ stable/7/usr.sbin/newsyslog/newsyslog.8 Mon May 3 22:09:06 2010 (r207587)
@@ -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
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
Modified: stable/7/usr.sbin/newsyslog/newsyslog.c
==============================================================================
--- stable/7/usr.sbin/newsyslog/newsyslog.c Mon May 3 20:59:27 2010 (r207586)
+++ stable/7/usr.sbin/newsyslog/newsyslog.c Mon May 3 22:09:06 2010 (r207587)
@@ -167,6 +167,7 @@ int needroot = 1; /* Root privs are nec
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, c
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, c
* 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
More information about the svn-src-stable
mailing list