XML2_CONFIG
UUID_EXTRA_OBJS
with_uuid
+with_systemd
with_selinux
with_openssl
krb_srvtab
with_bonjour
with_openssl
with_selinux
+with_systemd
with_readline
with_libedit_preferred
with_uuid
--with-bonjour build with Bonjour support
--with-openssl build with OpenSSL support
--with-selinux build with SELinux support
+ --with-systemd build with systemd support
--without-readline do not use GNU Readline nor BSD Libedit for editing
--with-libedit-preferred
prefer BSD Libedit over GNU Readline
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_selinux" >&5
$as_echo "$with_selinux" >&6; }
+#
+# Systemd
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with systemd support" >&5
+$as_echo_n "checking whether to build with systemd support... " >&6; }
+
+
+
+# Check whether --with-systemd was given.
+if test "${with_systemd+set}" = set; then :
+ withval=$with_systemd;
+ case $withval in
+ yes)
+
+$as_echo "#define USE_SYSTEMD 1" >>confdefs.h
+
+ ;;
+ no)
+ :
+ ;;
+ *)
+ as_fn_error $? "no argument expected for --with-systemd option" "$LINENO" 5
+ ;;
+ esac
+
+else
+ with_systemd=no
+
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemd" >&5
+$as_echo "$with_systemd" >&6; }
+
#
# Readline
#
done
+fi
+
+if test "$with_systemd" = yes ; then
+ ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-daemon.h" "ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default"
+if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes; then :
+
+else
+ as_fn_error $? "header file is required for systemd support" "$LINENO" 5
+fi
+
+
fi
if test "$with_libxml" = yes ; then
AC_SUBST(with_selinux)
AC_MSG_RESULT([$with_selinux])
+#
+# Systemd
+#
+AC_MSG_CHECKING([whether to build with systemd support])
+PGAC_ARG_BOOL(with, systemd, no, [build with systemd support],
+ [AC_DEFINE([USE_SYSTEMD], 1, [Define to build with systemd support. (--with-systemd)])])
+AC_SUBST(with_systemd)
+AC_MSG_RESULT([$with_systemd])
+
#
# Readline
#
[AC_MSG_ERROR([header file
or is required for PAM.])])])
fi
+if test "$with_systemd" = yes ; then
+ AC_CHECK_HEADER(systemd/sd-daemon.h, [], [AC_MSG_ERROR([header file is required for systemd support])])
+fi
+
if test "$with_libxml" = yes ; then
AC_CHECK_HEADER(libxml/parser.h, [], [AC_MSG_ERROR([header file is required for XML support])])
fi
+
+ --with-systemd
+
+ Build with support
+ service notifications. This improves integration if the server binary
+ is started under
systemd but has no impact
+ otherwise; see for more
+ information.
libsystemd and the
+ associated header files need to be installed to be able to use this
+ option.
+
+
+
+
--without-readline
contrib/start-scripts/linux in the
PostgreSQL source distribution.
+
+ When using
systemd , you can use the following
+ service unit file (e.g.,
+ at
/etc/systemd/system/postgresql.service ):
systemd
+[Unit]
+Description=PostgreSQL database server
+Documentation=man:postgres(1)
+
+[Service]
+Type=notify
+User=postgres
+ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
+ExecReload=/bin/kill -HUP $MAINPID
+KillMode=mixed
+KillSignal=SIGINT
+TimeoutSec=0
+
+[Install]
+WantedBy=multi-user.target
+
+ Using Type=notify requires that the server binary was
+ built with configure --with-systemd .
+
+
+ Consider carefully the timeout
+ setting.
systemd has a default timeout of 90
+ seconds as of this writing and will kill a process that does not notify
+ readiness within that time. But a
PostgreSQL
+ server that might have to perform crash recovery at startup could take
+ much longer to become ready. The suggested value of 0 disables the
+ timeout logic.
+
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@
# 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)
#include
#endif
+#ifdef USE_SYSTEMD
+#include
+#endif
+
#ifdef HAVE_PTHREAD_IS_THREADED_NP
#endif
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)
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);
Shutdown = ImmediateShutdown;
ereport(LOG,
(errmsg("received immediate shutdown request")));
+#ifdef USE_SYSTEMD
+ sd_notify(0, "STOPPING=1");
+#endif
TerminateChildren(SIGQUIT);
pmState = PM_WAIT_BACKENDS;
ereport(LOG,
(errmsg("database system is ready to accept connections")));
+#ifdef USE_SYSTEMD
+ sd_notify(0, "READY=1");
+#endif
+
continue;
}
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) &&
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;
/* 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