aboutsummaryrefslogtreecommitdiffstats
path: root/community/pgbouncer/pgbouncer.initd
diff options
context:
space:
mode:
Diffstat (limited to 'community/pgbouncer/pgbouncer.initd')
-rw-r--r--community/pgbouncer/pgbouncer.initd92
1 files changed, 92 insertions, 0 deletions
diff --git a/community/pgbouncer/pgbouncer.initd b/community/pgbouncer/pgbouncer.initd
new file mode 100644
index 0000000000..a44f6aeeb8
--- /dev/null
+++ b/community/pgbouncer/pgbouncer.initd
@@ -0,0 +1,92 @@
+#!/sbin/openrc-run
+
+extra_started_commands="reload"
+
+: ${user:="pgbouncer"}
+: ${group:="postgresql"}
+: ${cfgfile:="/etc/pgbouncer/pgbouncer.ini"}
+: ${nice_timeout:=60}
+: ${force_quit:="no"}
+: ${force_quit_timeout:=2}
+
+name="PgBouncer"
+command="/usr/bin/pgbouncer"
+command_args="-q $cfgfile"
+command_background="yes"
+
+pidfile="/run/$RC_SVCNAME.pid"
+start_stop_daemon_args="
+ --user $user
+ --group $group"
+
+required_files="$cfgfile"
+
+depend() {
+ use net
+ after postgresql
+}
+
+start_pre() {
+ local socket_dir=$(get_config unix_socket_dir)
+ if [ -n "$socket_dir" ]; then
+ checkpath -d -m 0755 -o postgres:postgres "$socket_dir" || return 1
+ fi
+
+ local logfile="$(get_config logfile)"
+ if [ -n "$logfile" ]; then
+ checkpath -f -m 0640 -o $user:$group "$logfile" || return 1
+ fi
+}
+
+stop() {
+ local retry="SIGINT/$nice_timeout"
+ yesno "$force_quit" \
+ && retry="$retry/SIGTERM/$force_quit_timeout" \
+ || force_quit_timeout=0
+
+ local seconds=$(( $nice_timeout + $force_quit_timeout ))
+
+ ebegin "Stopping $seconds (this can take up to $seconds seconds)"
+
+ start-stop-daemon --stop \
+ --pidfile "$pidfile" \
+ --retry "$retry" \
+ --progress \
+ --exec "$command"
+ eend $?
+}
+
+restart() {
+ local socket_dir=$(get_config unix_socket_dir)
+
+ if [ -n "$socket_dir" ]; then
+ ebegin "Performing online restart of $name"
+ "$command" -R "$command_args"
+ eend $?
+ else
+ stop && start
+ fi
+}
+
+reload() {
+ ebegin "Reloading $name configuration"
+ start-stop-daemon --signal HUP --pidfile "$pidfile"
+ eend $?
+}
+
+get_config() {
+ local name="$1"
+ local default="${2:-}"
+
+ if [ ! -f "$conffile" ]; then
+ printf '%s\n' "$default"
+ return 1
+ fi
+ sed -En "/^\s*${name}\b/{ # find line starting with the name
+ s/^\s*${name}\s*=?\s*([^#]+).*/\1/; # capture the value
+ s/\s*$//; # trim trailing whitespaces
+ s/^['\"](.*)['\"]$/\1/; # remove delimiting quotes
+ p
+ }" "$conffile" \
+ | grep . || printf '%s\n' "$default"
+}