On 2009/12/22 13:32, Stanislav Sedov wrote:
On Mon, 21 Dec 2009 20:12:02 +0000 (UTC)
Xin LI<[email protected]>  mentioned:

Author: delphij
Date: Mon Dec 21 20:12:01 2009
New Revision: 200806
URL: http://svn.freebsd.org/changeset/base/200806

Log:
   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.

Or the process has not created the PID file and can be screwed up by rotating
its log file.  What about making this optional controlled by a command line
switch?  It might be a more safe alternative.

Yes probably. I think the both case (can't find the PID file, or the PID file is empty) should be counted, as they may represent the similar situation, however, I think we'd better leave the current behavior default, since it's the most case.

Do you think the attached patch makes sense?

Cheers,
--
Xin LI <[email protected]>      http://www.delphij.net/
FreeBSD - The Power to Serve!          Live free or die
Index: newsyslog.8
===================================================================
--- newsyslog.8 (revision 200868)
+++ newsyslog.8 (working copy)
@@ -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 December 23, 2009
 .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 @@
 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
Index: newsyslog.c
===================================================================
--- newsyslog.c (revision 200868)
+++ newsyslog.c (working copy)
@@ -167,6 +167,7 @@
 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 @@
                *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:FNR:P")) != -1)
                switch (ch) {
                case 'a':
                        archtodir++;
@@ -624,6 +625,8 @@
                case 'N':
                        norotate++;
                        break;
+               case 'P':
+                       enforcepid++;
                case 'R':
                        rotatereq++;
                        requestor = strdup(optarg);
@@ -1779,7 +1782,7 @@
 
        f = fopen(ent->pid_file, "r");
        if (f == NULL) {
-               if (errno == ENOENT) {
+               if (errno == ENOENT && enforcepid == 0) {
                        /*
                         * Warn if the PID file doesn't exist, but do
                         * not consider it an error.  Most likely it
@@ -1801,7 +1804,7 @@
                 * 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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to