mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Add support for systemd service notifications
Insert sd_notify() calls at server start and stop for integration with systemd. This allows the use of systemd service units of type "notify", which greatly simplifies the systemd configuration. Reviewed-by: Pavel Stěhule <pavel.stehule@gmail.com>
This commit is contained in:
@ -184,6 +184,7 @@ with_python = @with_python@
|
||||
with_tcl = @with_tcl@
|
||||
with_openssl = @with_openssl@
|
||||
with_selinux = @with_selinux@
|
||||
with_systemd = @with_systemd@
|
||||
with_libxml = @with_libxml@
|
||||
with_libxslt = @with_libxslt@
|
||||
with_system_tzdata = @with_system_tzdata@
|
||||
|
@ -45,6 +45,10 @@ LIBS := $(filter-out -lpgport -lpgcommon, $(LIBS)) $(LDAP_LIBS_BE)
|
||||
# The backend doesn't need everything that's in LIBS, however
|
||||
LIBS := $(filter-out -lz -lreadline -ledit -ltermcap -lncurses -lcurses, $(LIBS))
|
||||
|
||||
ifeq ($(with_systemd),yes)
|
||||
LIBS += -lsystemd
|
||||
endif
|
||||
|
||||
##########################################################################
|
||||
|
||||
all: submake-libpgport submake-schemapg postgres $(POSTGRES_IMP)
|
||||
|
@ -87,6 +87,10 @@
|
||||
#include <dns_sd.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_SYSTEMD
|
||||
#include <systemd/sd-daemon.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_PTHREAD_IS_THREADED_NP
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
@ -2533,6 +2537,9 @@ pmdie(SIGNAL_ARGS)
|
||||
Shutdown = SmartShutdown;
|
||||
ereport(LOG,
|
||||
(errmsg("received smart shutdown request")));
|
||||
#ifdef USE_SYSTEMD
|
||||
sd_notify(0, "STOPPING=1");
|
||||
#endif
|
||||
|
||||
if (pmState == PM_RUN || pmState == PM_RECOVERY ||
|
||||
pmState == PM_HOT_STANDBY || pmState == PM_STARTUP)
|
||||
@ -2585,6 +2592,9 @@ pmdie(SIGNAL_ARGS)
|
||||
Shutdown = FastShutdown;
|
||||
ereport(LOG,
|
||||
(errmsg("received fast shutdown request")));
|
||||
#ifdef USE_SYSTEMD
|
||||
sd_notify(0, "STOPPING=1");
|
||||
#endif
|
||||
|
||||
if (StartupPID != 0)
|
||||
signal_child(StartupPID, SIGTERM);
|
||||
@ -2645,6 +2655,9 @@ pmdie(SIGNAL_ARGS)
|
||||
Shutdown = ImmediateShutdown;
|
||||
ereport(LOG,
|
||||
(errmsg("received immediate shutdown request")));
|
||||
#ifdef USE_SYSTEMD
|
||||
sd_notify(0, "STOPPING=1");
|
||||
#endif
|
||||
|
||||
TerminateChildren(SIGQUIT);
|
||||
pmState = PM_WAIT_BACKENDS;
|
||||
@ -2787,6 +2800,10 @@ reaper(SIGNAL_ARGS)
|
||||
ereport(LOG,
|
||||
(errmsg("database system is ready to accept connections")));
|
||||
|
||||
#ifdef USE_SYSTEMD
|
||||
sd_notify(0, "READY=1");
|
||||
#endif
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -4916,6 +4933,11 @@ sigusr1_handler(SIGNAL_ARGS)
|
||||
if (XLogArchivingAlways())
|
||||
PgArchPID = pgarch_start();
|
||||
|
||||
#ifdef USE_SYSTEMD
|
||||
if (!EnableHotStandby)
|
||||
sd_notify(0, "READY=1");
|
||||
#endif
|
||||
|
||||
pmState = PM_RECOVERY;
|
||||
}
|
||||
if (CheckPostmasterSignal(PMSIGNAL_BEGIN_HOT_STANDBY) &&
|
||||
@ -4930,6 +4952,10 @@ sigusr1_handler(SIGNAL_ARGS)
|
||||
ereport(LOG,
|
||||
(errmsg("database system is ready to accept read only connections")));
|
||||
|
||||
#ifdef USE_SYSTEMD
|
||||
sd_notify(0, "READY=1");
|
||||
#endif
|
||||
|
||||
pmState = PM_HOT_STANDBY;
|
||||
/* Some workers may be scheduled to start now */
|
||||
StartWorkerNeeded = true;
|
||||
|
@ -833,6 +833,9 @@
|
||||
/* Define to 1 to use Intel SSSE 4.2 CRC instructions with a runtime check. */
|
||||
#undef USE_SSE42_CRC32C_WITH_RUNTIME_CHECK
|
||||
|
||||
/* Define to build with systemd support. (--with-systemd) */
|
||||
#undef USE_SYSTEMD
|
||||
|
||||
/* Define to select SysV-style semaphores. */
|
||||
#undef USE_SYSV_SEMAPHORES
|
||||
|
||||
|
Reference in New Issue
Block a user