r2230 - trunk/varnish-cache/bin/varnishncsa

Anders Nordby anders at fupp.net
Tue Nov 20 15:16:39 CET 2007


Hi,

This does not seem to work well. Upon sending SIGHUP to varnishncsa, it
does not start writing to the new log.

On Thu, Nov 08, 2007 at 05:28:26PM +0100, des at projects.linpro.no wrote:
> Author: des
> Date: 2007-11-08 17:28:26 +0100 (Thu, 08 Nov 2007)
> New Revision: 2230
> 
> Modified:
>    trunk/varnish-cache/bin/varnishncsa/varnishncsa.1
>    trunk/varnish-cache/bin/varnishncsa/varnishncsa.c
> Log:
> Copy&paste -D (daemonize) from varnishlog.
> 
> 
> Modified: trunk/varnish-cache/bin/varnishncsa/varnishncsa.1
> ===================================================================
> --- trunk/varnish-cache/bin/varnishncsa/varnishncsa.1	2007-11-08 16:27:53 UTC (rev 2229)
> +++ trunk/varnish-cache/bin/varnishncsa/varnishncsa.1	2007-11-08 16:28:26 UTC (rev 2230)
> @@ -28,7 +28,7 @@
>  .\"
>  .\" $Id$
>  .\"
> -.Dd June 15, 2007
> +.Dd November 8, 2007
>  .Dt VARNISHNCSA 1
>  .Os
>  .Sh NAME
> @@ -40,10 +40,12 @@
>  .Op Fl b
>  .Op Fl C
>  .Op Fl c
> +.Op Fl D
>  .Op Fl d
>  .Op Fl I Ar regex
>  .Op Fl i Ar tag
>  .Op Fl n Ar varnish_name
> +.Op Fl P Ar file
>  .Op Fl r Ar file
>  .Op Fl V
>  .Op Fl w Ar file
> @@ -82,6 +84,8 @@
>  is specified,
>  .Nm
>  acts as if they both were.
> +.It Fl D
> +Daemonize.
>  .It Fl d
>  Process old log entries on startup.
>  Normally,
> @@ -109,6 +113,9 @@
>  If
>  .Fl n
>  is not specified, the host name is used.
> +.It Fl P Ar file
> +Write the process's PID to the specified
> +.Ar file .
>  .It Fl r Ar file
>  Read log entries from
>  .Ar file
> 
> Modified: trunk/varnish-cache/bin/varnishncsa/varnishncsa.c
> ===================================================================
> --- trunk/varnish-cache/bin/varnishncsa/varnishncsa.c	2007-11-08 16:27:53 UTC (rev 2229)
> +++ trunk/varnish-cache/bin/varnishncsa/varnishncsa.c	2007-11-08 16:28:26 UTC (rev 2230)
> @@ -69,10 +69,16 @@
>  #include <unistd.h>
>  #include <limits.h>
>  
> +#ifndef HAVE_DAEMON
> +#include "compat/daemon.h"
> +#endif
> +
> +#include "vsb.h"
> +#include "vpf.h"
> +
>  #include "libvarnish.h"
>  #include "shmlog.h"
>  #include "varnishapi.h"
> -#include "vsb.h"
>  
>  static struct logline {
>  	char *df_H;			/* %H, Protocol version */
> @@ -434,7 +440,7 @@
>  usage(void)
>  {
>  
> -	fprintf(stderr, "usage: varnishncsa %s [-aV] [-n varnish_name] [-w file]\n", VSL_ARGS);
> +	fprintf(stderr, "usage: varnishncsa %s [-aDV] [-n varnish_name] [-P file] [-w file]\n", VSL_ARGS);
>  	exit(1);
>  }
>  
> @@ -442,15 +448,17 @@
>  main(int argc, char *argv[])
>  {
>  	int i, c;
> +	int a_flag = 0, D_flag = 0;
> +	const char *n_arg = NULL;
> +	const char *P_arg = NULL;
> +	const char *w_arg = NULL;
> +	struct pidfh *pfh = NULL;
>  	struct VSL_data *vd;
> -	const char *ofn = NULL;
> -	const char *n_arg = NULL;
> -	int append = 0;
>  	FILE *of;
>  
>  	vd = VSL_New();
>  
> -	while ((c = getopt(argc, argv, VSL_ARGS "an:Vw:")) != -1) {
> +	while ((c = getopt(argc, argv, VSL_ARGS "aDn:P:Vw:")) != -1) {
>  		i = VSL_Arg(vd, c, optarg);
>  		if (i < 0)
>  			exit (1);
> @@ -458,16 +466,22 @@
>  			continue;
>  		switch (c) {
>  		case 'a':
> -			append = 1;
> +			a_flag = 1;
>  			break;
> +		case 'D':
> +			D_flag = 1;
> +			break;
>  		case 'n':
>  			n_arg = optarg;
>  			break;
> +		case 'P':
> +			P_arg = optarg;
> +			break;
>  		case 'V':
>  			varnish_version("varnishncsa");
>  			exit(0);
>  		case 'w':
> -			ofn = optarg;
> +			w_arg = optarg;
>  			break;
>  		default:
>  			if (VSL_Arg(vd, c, optarg) > 0)
> @@ -479,22 +493,37 @@
>  	if (VSL_OpenLog(vd, n_arg))
>  		exit(1);
>  
> -	if (ofn) {
> -		of = open_log(ofn, append);
> +	if (P_arg && (pfh = vpf_open(P_arg, 0600, NULL)) == NULL) {
> +		perror(P_arg);
> +		exit(1);
> +	}
> +
> +	if (D_flag && daemon(0, 0) == -1) {
> +		perror("daemon()");
> +		if (pfh != NULL)
> +			vpf_remove(pfh);
> +		exit(1);
> +	}
> +
> +	if (pfh != NULL)
> +		vpf_write(pfh);
> +
> +	if (w_arg) {
> +		of = open_log(w_arg, a_flag);
>  		signal(SIGHUP, sighup);
>  	} else {
> -		ofn = "stdout";
> +		w_arg = "stdout";
>  		of = stdout;
>  	}
>  
>  	while (VSL_Dispatch(vd, h_ncsa, of) == 0) {
>  		if (fflush(of) != 0) {
> -			perror(ofn);
> +			perror(w_arg);
>  			exit(1);
>  		}
>  		if (reopen && of != stdout) {
>  			fclose(of);
> -			of = open_log(ofn, append);
> +			of = open_log(w_arg, a_flag);
>  			reopen = 0;
>  		}
>  	}
> 
> _______________________________________________
> varnish-commit mailing list
> varnish-commit at projects.linpro.no
> http://projects.linpro.no/mailman/listinfo/varnish-commit


-- 
Anders.



More information about the varnish-commit mailing list