#!/sbin/runscript # Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ PG_ROOT=/usr/local/pg-10_1 PATH=$PG_ROOT/bin:$PATH LD_LIBRARY_PATH=$PG_ROOT/lib:$LD_LIBRARY_PATH DATA_DIR=/var/lib/postgresql/10.1/data PGDATA=/var/lib/postgresql/10.1/data START_TIMEOUT=11 NICE_TIMEOUT=60 RUDE_TIMEOUT=30 FORCE_TIMEOUT=2 psql --version extra_started_commands="reload" get_config() { [ -f ${PGDATA%/}/postgresql.conf ] || return 1 eval echo $(sed -e 's:#.*::' ${PGDATA%/}/postgresql.conf \ | awk '$1 == "'$1'" { print ($2 == "=" ? $3 : $2) }') } depend() { use net provide postgresql if [ "$(get_config log_destination)" = "syslog" ]; then use logger fi } configured_port=$(get_config port) : ${configured_port:=${PGPORT}} socket_path=$(get_config unix_socket_directory) : ${socket_path:=/run/postgresql} echo "Konfigured port ist ${configured_port} used ${PGDATA%/}/postgresql.conf" checkconfig() { # Check that DATA_DIR has been set if [ -z ${DATA_DIR} ] ; then eerror "DATA_DIR not set" eerror "HINT: Perhaps you need to update /etc/conf.d/postgresql-10.1" return 1 fi # Check that DATA_DIR exists if [ ! -d ${DATA_DIR} ] ; then eerror "Directory not found: ${DATA_DIR}" eerror "HINT: Ensure that DATA_DIR points to the right path." eerror "HINT: Or perhaps you need to create the database cluster:" return 1 fi # Check for the existence of PostgreSQL's config files, and set the # proper mode and ownership. # Only three files should be checked as potentially other files # may be in PGDATA that should not be touched. local file for file in postgresql pg_hba pg_ident ; do file="${PGDATA%/}/${file}.conf" if [ -f ${file} ] ; then checkpath -f -m 0600 -o postgres:postgres ${file} else eerror "${file} not found" eerror "HINT: mv ${DATA_DIR%/}/*.conf ${PGDATA}" return 1 fi done # Set the proper permission for the socket path and create it if # it doesn't exist. checkpath -d -m 0770 -o postgres:postgres ${socket_path} if [ -e ${socket_path%/}/.s.PGSQL.${configured_port} ] ; then eerror "Socket conflict." eerror "A server is already listening on:" eerror " ${socket_path%/}/.s.PGSQL.${configured_port}" eerror "HINT: Change PGPORT to listen on a different socket." return 1 fi } start() { checkconfig || return 1 ebegin "Starting PostgreSQL" rm -f ${DATA_DIR%/}/postmaster.pid local extraenv local x for x in ${PG_EXTRA_ENV} ; do extraenv="${extraenv} --env ${x}" done echo check "PGPORT=${configured_port} START_TIMEOUT ist ${START_TIMEOUT}" start-stop-daemon --start --user postgres --env "PGPORT=${configured_port}" ${extraenv} --pidfile ${DATA_DIR%/}/postmaster.pid --wait $((${START_TIMEOUT}*1000)) --exec $PG_ROOT/bin/pg_ctl start -- -D ${DATA_DIR} ${PGOPTS} local retval=$? if [ $retval -ne 0 ] ; then eerror "Check the log for a possible explanation of the above error." eerror " ${DATA_DIR%/}/postmaster.log" eend $retval return $retval fi eend $retval } stop() { local seconds=$(( ${NICE_TIMEOUT} + ${RUDE_TIMEOUT} + ${FORCE_TIMEOUT} )) ebegin "Stopping PostgreSQL (this can take up to ${seconds} seconds)" local retval local retries=SIGTERM/${NICE_TIMEOUT} if [ "${RUDE_QUIT}" != "NO" ] ; then einfo "RUDE_QUIT enabled." retries="${retries}/SIGINT/${RUDE_TIMEOUT}" fi if [ "${FORCE_QUIT}" = "YES" ] ; then einfo "FORCE_QUIT enabled." ewarn "A recover-run might be executed on next startup." retries="${retries}/SIGQUIT/${FORCE_TIMEOUT}" fi # Loops through nice, rude, and force quit in one go. start-stop-daemon --stop \ --exec $PG_ROOT/bin/bin/postgres \ --retry ${retries} \ --pidfile ${DATA_DIR%/}/postmaster.pid eend } reload() { ebegin "Reloading PostgreSQL configuration" kill -HUP $(head -n1 ${DATA_DIR%/}/postmaster.pid) eend $? }