[PATCH] Core: made it possible to disable PID files with "pid off"

Maxim Dounin mdounin at mdounin.ru
Wed May 8 01:12:07 UTC 2024


# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1715130688 -10800
#      Wed May 08 04:11:28 2024 +0300
# Node ID b1bf4da2220d8c5321cbc8a7c873c61129b66a05
# Parent  93bbb9fbf30dd82709551610f05e22eac17717d4
Core: made it possible to disable PID files with "pid off".

While it is not generally recommended, this might be beneficial in some
configurations, such as with immutable images and direct control by
a service manager.

diff --git a/src/core/nginx.c b/src/core/nginx.c
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -766,7 +766,9 @@ ngx_exec_new_binary(ngx_cycle_t *cycle, 
 
     ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
 
-    if (ngx_rename_file(ccf->pid.data, ccf->oldpid.data) == NGX_FILE_ERROR) {
+    if (ccf->pid.len
+        && ngx_rename_file(ccf->pid.data, ccf->oldpid.data) == NGX_FILE_ERROR)
+    {
         ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                       ngx_rename_file_n " %s to %s failed "
                       "before executing new binary process \"%s\"",
@@ -781,8 +783,9 @@ ngx_exec_new_binary(ngx_cycle_t *cycle, 
     pid = ngx_execute(cycle, &ctx);
 
     if (pid == NGX_INVALID_PID) {
-        if (ngx_rename_file(ccf->oldpid.data, ccf->pid.data)
-            == NGX_FILE_ERROR)
+        if (ccf->pid.len
+            && ngx_rename_file(ccf->oldpid.data, ccf->pid.data)
+               == NGX_FILE_ERROR)
         {
             ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                           ngx_rename_file_n " %s back to %s failed after "
@@ -1168,20 +1171,26 @@ ngx_core_module_init_conf(ngx_cycle_t *c
         ngx_str_set(&ccf->pid, NGX_PID_PATH);
     }
 
-    if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) {
-        return NGX_CONF_ERROR;
-    }
+    if (ngx_strcmp(ccf->pid.data, "off") == 0) {
+        ngx_str_set(&ccf->pid, "");
+        ngx_str_set(&ccf->oldpid, "");
 
-    ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT);
+    } else {
+        if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) {
+            return NGX_CONF_ERROR;
+        }
 
-    ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len);
-    if (ccf->oldpid.data == NULL) {
-        return NGX_CONF_ERROR;
+        ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT);
+
+        ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len);
+        if (ccf->oldpid.data == NULL) {
+            return NGX_CONF_ERROR;
+        }
+
+        ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len),
+                   NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT));
     }
 
-    ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len),
-               NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT));
-
 
 #if !(NGX_WIN32)
 
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -1027,6 +1027,10 @@ ngx_create_pidfile(ngx_str_t *name, ngx_
         return NGX_OK;
     }
 
+    if (name->len == 0) {
+        return NGX_OK;
+    }
+
     ngx_memzero(&file, sizeof(ngx_file_t));
 
     file.name = *name;
@@ -1070,6 +1074,10 @@ ngx_delete_pidfile(ngx_cycle_t *cycle)
 
     ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
 
+    if (ccf->pid.len == 0) {
+        return;
+    }
+
     name = ngx_new_binary ? ccf->oldpid.data : ccf->pid.data;
 
     if (ngx_delete_file(name) == NGX_FILE_ERROR) {
@@ -1092,6 +1100,12 @@ ngx_signal_process(ngx_cycle_t *cycle, c
 
     ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
 
+    if (ccf->pid.len == 0) {
+        ngx_log_error(NGX_LOG_ERR, cycle->log, 0,
+                      "no PID file configured");
+        return 1;
+    }
+
     ngx_memzero(&file, sizeof(ngx_file_t));
 
     file.name = ccf->pid;
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -619,9 +619,10 @@ ngx_reap_children(ngx_cycle_t *cycle)
                 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx,
                                                        ngx_core_module);
 
-                if (ngx_rename_file((char *) ccf->oldpid.data,
-                                    (char *) ccf->pid.data)
-                    == NGX_FILE_ERROR)
+                if (ccf->pid.len
+                    && ngx_rename_file((char *) ccf->oldpid.data,
+                                       (char *) ccf->pid.data)
+                       == NGX_FILE_ERROR)
                 {
                     ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
                                   ngx_rename_file_n " %s back to %s failed "




More information about the nginx-devel mailing list