From: Eric Bollengier Date: Mon, 12 Dec 2022 16:25:16 +0000 (+0100) Subject: Update pid file after a reload X-Git-Tag: Beta-15.0.0~322 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=edbea5c6f81ce895c5723163c2c8a9ec17f0f404;p=thirdparty%2Fbacula.git Update pid file after a reload --- diff --git a/bacula/src/dird/dird.c b/bacula/src/dird/dird.c index c03b087dc..6cd5318d2 100644 --- a/bacula/src/dird/dird.c +++ b/bacula/src/dird/dird.c @@ -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 } diff --git a/bacula/src/lib/bsys.c b/bacula/src/lib/bsys.c index 0b1c879d8..45ccf210b 100644 --- a/bacula/src/lib/bsys.c +++ b/bacula/src/lib/bsys.c @@ -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 */ diff --git a/bacula/src/lib/protos.h b/bacula/src/lib/protos.h index da8e07453..644622b55 100644 --- a/bacula/src/lib/protos.h +++ b/bacula/src/lib/protos.h @@ -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);