Commit 45e0ff10 authored by Joe Orton's avatar Joe Orton
Browse files

Tweak rotatelogs -p such that the program is invoked the first time a

new log file is opened as well as for rotations:

* support/rotatelogs.c (usage): Update.
  (post_rotate): Omit third arg if no prev logfile known.
  (doRotate): Invoke even if no previous logfile was open.



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1140099 13f79535-47bb-0310-9956-ffa450edef68
parent 4e202646
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -61,13 +61,16 @@ the log continuously across rotations using a command like
<code>tail -F linkname</code>.</dd>

<dt><code>-p</code> <var>program</var></dt>
<dd>Causes the specified program to be executed after each rotation.
Two arguments are supplied upon execution: the newly opened file and
the previous file, respectively.  <code>rotatelogs</code> does not
wait for the specified program to terminate before continuing to
operate, and will not log any error code returned on termination.  The
spawned program uses the same stdin, stdout, and stderr as rotatelogs
itself, and also inherits the environment.</dd>

<dd>If given, <code>rotatelogs</code> will execute the specified
program every time a new log file is opened.  The filename of the
newly opened file is passed as the first argument to the program.  If
executing after a rotation, the old log file is passed as the second
argument.  <code>rotatelogs</code> does not wait for the specified
program to terminate before continuing to operate, and will not log
any error code returned on termination.  The spawned program uses the
same stdin, stdout, and stderr as rotatelogs itself, and also inherits
the environment.</dd>

<dt><code>-f</code></dt>
<dd>Causes the logfile to be opened immediately, as soon as
+13 −11
Original line number Diff line number Diff line
@@ -149,16 +149,14 @@ static void usage(const char *argv0, const char *reason)
            "  -v       Verbose operation. Messages are written to stderr.\n"
            "  -l       Base rotation on local time instead of UTC.\n"
            "  -L path  Create hard link from current log to specified path.\n"
            "  -p prog  Run specified program on log rotation. See below.\n"
            "  -p prog  Run specified program after opening a new log file. See below.\n"
            "  -f       Force opening of log on program start.\n"
            "  -t       Truncate logfile instead of rotating, tail friendly.\n"
            "  -e       Echo log to stdout for further processing.\n"
            "\n"
            "The post-rotation program must be an executable program or script.\n"
            "Scripts are supported as long as the shebang line uses a working\n"
            "interpreter. The program is invoked as \"[prog] <curfile> <prevfile>\"\n"
            "where <curfile> is the filename of the currently used logfile, and\n"
            "<prevfile> is the filename of the previously used logfile.\n"
            "The program is invoked as \"[prog] <curfile> [<prevfile>]\"\n"
            "where <curfile> is the filename of the newly opened logfile, and\n"
            "<prevfile>, if given, is the filename of the previously used logfile.\n"
            "\n");
    exit(1);
}
@@ -313,8 +311,13 @@ static void post_rotate(apr_pool_t *pool, rotate_config_t *config, rotate_status

    argv[0] = config->postrotate_prog;
    argv[1] = status->filename;
    if (status->filenameprev[0]) {
        argv[2] = status->filenameprev;
        argv[3] = NULL;
    }
    else {
        argv[2] = NULL;
    }

    if (config->verbose)
        fprintf(stderr, "Calling post-rotate program: %s\n", argv[0]);
@@ -426,9 +429,8 @@ static void doRotate(rotate_config_t *config, rotate_status_t *status)
        }
    }
    else {
        /* If postrotate configured, and this is a real rotate rather
         * than an initial open, run the post-rotate program: */
        if (config->postrotate_prog && status->pfile_prev) {
        /* If postrotate configured, run the post-rotate program: */
        if (config->postrotate_prog) {
            post_rotate(status->pfile, config, status);
        }