]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Update pid file after a reload
authorEric Bollengier <eric@baculasystems.com>
Mon, 12 Dec 2022 16:25:16 +0000 (17:25 +0100)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:57:00 +0000 (13:57 +0200)
bacula/src/dird/dird.c
bacula/src/lib/bsys.c
bacula/src/lib/protos.h

index c03b087dcd5f99586310ad9eb5575c13a2756b48..6cd5318d21e7c79ec4ae6ed16a654813825e6cfa 100644 (file)
@@ -809,6 +809,8 @@ bool reload_config(int sig, alist *msglist)
       events_send_msg(NULL, "DD0005",
                       EVENTS_TYPE_DAEMON, "*Director*",
                       (intptr_t)get_first_port_host_order(director->DIRaddrs), "Director configuration reloaded");
+      update_pid_file(director->pid_directory, "bacula-dir",
+                      get_first_port_host_order(director->DIRaddrs));
       ret = true;               // reload ok
    }
 
index 0b1c879d813ce3f0797cadbc15c1ac335836561a..45ccf210b7f084143b2d1c2cfc730f9ba5e5614f 100644 (file)
@@ -704,6 +704,29 @@ void create_pid_file(char *dir, const char *progname, int port)
    free_pool_memory(errmsg);
 }
 
+/*
+ * Update a standard "Unix" pid file.
+ */
+int update_pid_file(char *dir, const char *progname, int port)
+{
+   POOLMEM *fname = get_pool_memory(PM_FNAME);
+   int ret = 0;
+   int pidfd;
+   
+   Mmsg(fname, "%s/%s.%d.pid", dir, progname, port);
+   if ((pidfd = open(fname, O_WRONLY|O_APPEND, 0640)) >= 0) {
+      btime_t now = time(NULL);
+      set_own_time(pidfd, fname, now, now);
+      // Update mtime
+      close(pidfd);
+   } else {
+      ret = -1;
+   }
+
+   free_pool_memory(fname);
+   return ret;
+}
+
 /*
  * Delete the pid file if we created it
  */
index da8e074539586d9bfa42bce6cc2bc1ba762e7804..644622b559c2fc50b449c62fde5106c2602afe22 100644 (file)
@@ -113,6 +113,7 @@ int       pool_sprintf           (char *pool_buf, const char *fmt, ...);
 int       create_lock_file       (char *fname, const char *progname, const char *filetype, POOLMEM **errmsg, int *fd);
 void      create_pid_file        (char *dir, const char *progname, int port);
 int       delete_pid_file        (char *dir, const char *progname, int port);
+int       update_pid_file        (char *dir, const char *progname, int port);
 void      drop                   (char *uid, char *gid, bool keep_readall_caps);
 int reset_job_user();
 int change_job_user(char *uname, char *gname, char *errmsg, int errlen);