From: Joe Orton Date: Mon, 27 Jun 2011 10:57:10 +0000 (+0000) Subject: Tweak rotatelogs -p such that the program is invoked the first time a X-Git-Tag: 2.3.13~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=550078b73197f5185cb2a2c1e55c9f5fdb4edcb7;p=thirdparty%2Fapache%2Fhttpd.git 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 --- diff --git a/docs/manual/programs/rotatelogs.xml b/docs/manual/programs/rotatelogs.xml index 8e3d75c14ec..63c08d17a86 100644 --- a/docs/manual/programs/rotatelogs.xml +++ b/docs/manual/programs/rotatelogs.xml @@ -61,13 +61,16 @@ the log continuously across rotations using a command like tail -F linkname.
-p program
-
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. rotatelogs 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.
+ +
If given, rotatelogs 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. rotatelogs 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.
-f
Causes the logfile to be opened immediately, as soon as diff --git a/support/rotatelogs.c b/support/rotatelogs.c index 75656bc6fc7..733035c0cff 100644 --- a/support/rotatelogs.c +++ b/support/rotatelogs.c @@ -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] \"\n" - "where is the filename of the currently used logfile, and\n" - " is the filename of the previously used logfile.\n" + "The program is invoked as \"[prog] []\"\n" + "where is the filename of the newly opened logfile, and\n" + ", 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; - argv[2] = status->filenameprev; - argv[3] = NULL; + 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); }