r2230 - trunk/varnish-cache/bin/varnishncsa

des at projects.linpro.no des at projects.linpro.no
Thu Nov 8 17:28:26 CET 2007


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;
 		}
 	}




More information about the varnish-commit mailing list