Jelajahi Sumber

Merge pull request #669 from tkanoh/daemonize

Small patch for daemonize
bel2125 6 tahun lalu
induk
melakukan
1d0b39af9e
3 mengubah file dengan 39 tambahan dan 1 penghapusan
  1. 8 1
      Makefile
  2. 6 0
      src/civetweb.c
  3. 25 0
      src/main.c

+ 8 - 1
Makefile

@@ -22,10 +22,11 @@ EXEC_PREFIX = $(PREFIX)
 BINDIR = $(EXEC_PREFIX)/bin
 DATAROOTDIR = $(PREFIX)/share
 DOCDIR = $(DATAROOTDIR)/doc/$(CPROG)
-SYSCONFDIR = $(PREFIX)/etc
+SYSCONFDIR ?= $(PREFIX)/etc
 HTMLDIR = $(DOCDIR)
 INCLUDEDIR = $(DESTDIR)$(PREFIX)/include
 LIBDIR = $(DESTDIR)$(EXEC_PREFIX)/lib
+PID_FILE ?= /var/run/$(CPROG).pid
 
 # build tools
 MKDIR = mkdir -p
@@ -162,6 +163,10 @@ ifdef WITH_SERVER_STATS
   CFLAGS += -DUSE_SERVER_STATS
 endif
 
+ifdef WITH_DAEMONIZE
+  CFLAGS += -DDAEMONIZE -DPID_FILE=\"$(PID_FILE)\"
+endif
+
 # File names
 ifdef CONFIG_FILE
   CFLAGS += -DCONFIG_FILE=\"$(CONFIG_FILE)\"
@@ -239,6 +244,8 @@ help:
 	@echo "   WITH_ZLIB=1           build includes support for on-the-fly compression using zlib"
 	@echo "   WITH_CPP=1            build library with c++ classes"
 	@echo "   WITH_EXPERIMENTAL=1   build with experimental features"
+	@echo "   WITH_DAEMONIZE=1      build with daemonize."
+	@echo "   PID_FILE=/path        PID file path of daemon."
 	@echo "   CONFIG_FILE=file      use 'file' as the config file"
 	@echo "   CONFIG_FILE2=file     use 'file' as the backup config file"
 	@echo "   DOCUMENT_ROOT=/path   document root override when installing"

+ 6 - 0
src/civetweb.c

@@ -2400,6 +2400,9 @@ enum {
 #endif
 	ADDITIONAL_HEADER,
 	ALLOW_INDEX_SCRIPT_SUB_RES,
+#if defined(DAEMONIZE)
+	ENABLE_DAEMONIZE,
+#endif
 
 	NUM_OPTIONS
 };
@@ -2512,6 +2515,9 @@ static const struct mg_option config_options[] = {
 #endif
     {"additional_header", MG_CONFIG_TYPE_STRING_MULTILINE, NULL},
     {"allow_index_script_resource", MG_CONFIG_TYPE_BOOLEAN, "no"},
+#if defined(DAEMONIZE)
+    {"daemonize", MG_CONFIG_TYPE_BOOLEAN, "no"},
+#endif
 
     {NULL, MG_CONFIG_TYPE_UNKNOWN, NULL}};
 

+ 25 - 0
src/main.c

@@ -1327,6 +1327,31 @@ start_civetweb(int argc, char *argv[])
 	signal(SIGTERM, signal_handler);
 	signal(SIGINT, signal_handler);
 
+#if defined(DAEMONIZE)
+	/* Daemonize */
+	for (i = 0; options[i] != NULL; i++) {
+		if (strcmp(options[i],"daemonize") ==  0) {
+			if(options[i+1] != NULL) {
+				if(mg_strcasecmp(options[i+1], "yes") == 0) {
+					fprintf(stdout, "daemonize.\n");
+					if(daemon(0,0) != 0) {
+						fprintf(stdout, "Faild to daemonize main process.\n");
+						exit(EXIT_FAILURE);
+					}
+					FILE *fp;
+					if((fp=fopen(PID_FILE,"w")) == 0) {
+						fprintf(stdout, "Can not open %s.\n", PID_FILE);
+						exit(EXIT_FAILURE);
+					}
+					fprintf(fp,"%d",getpid());
+					fclose(fp);
+				}
+			}
+			break;
+		}
+	}
+#endif
+
 	/* Initialize user data */
 	memset(&g_user_data, 0, sizeof(g_user_data));