#!/bin/bash export CONTAINERROLE=":${CONTAINERROLE:-all}:" export DA_ROOT="${DA_ROOT:-/usr/share/docassemble}" export DA_DEFAULT_LOCAL="local3.14" export DA_ACTIVATE="${DA_PYTHON:-${DA_ROOT}/${DA_DEFAULT_LOCAL}}/bin/activate" export DA_CONFIG_FILE="${DA_CONFIG:-${DA_ROOT}/config/config.yml}" source /dev/stdin < <(su -c "source \"${DA_ACTIVATE}\" && python -m docassemble.base.read_config \"${DA_CONFIG_FILE}\"" www-data) source "${DA_ACTIVATE}" set -- $LOCALE export LANG=$1 PGVERSION=`pg_config --version | sed 's/PostgreSQL \([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'` if [[ $PGVERSION =~ ^([0-9]+) ]] && (( ${BASH_REMATCH[1]} >= 10 )); then PGVERSION=${BASH_REMATCH[1]} fi chown -R postgres:postgres /etc/postgresql chown -R postgres:postgres /var/lib/postgresql chown -R postgres:postgres /var/run/postgresql chown -R postgres:postgres /var/log/postgresql function stopfunc { if [[ ! $CONTAINERROLE =~ .*:(all):.* ]]; then echo "waiting for deregistration" >&2 sleep 7 fi echo "backing up postgres" >&2 if [ "${S3ENABLE:-false}" == "true" ] || [ "${AZUREENABLE:-false}" == "true" ]; then PGBACKUPDIR=`mktemp -d` else PGBACKUPDIR="${DA_ROOT}/backup/postgres" mkdir -p "$PGBACKUPDIR" fi chown postgres:postgres "$PGBACKUPDIR" su postgres -c 'psql -Atc "SELECT datname FROM pg_database" postgres' | grep -v -e template -e postgres | awk -v backupdir="$PGBACKUPDIR" '{print "cd /tmp; su postgres -c \"pg_dump -F c -f " backupdir "/" $1 " " $1 "\""}' | bash if [ "${S3ENABLE:-false}" == "true" ]; then s4cmd dsync "$PGBACKUPDIR" "s3://${S3BUCKET}/postgres" rm -rf "$PGBACKUPDIR" elif [ "${AZUREENABLE:-false}" == "true" ]; then for the_file in $(find "$PGBACKUPDIR" -type f); do target_file=`basename $the_file` az storage blob upload --no-progress --overwrite true --only-show-errors --output none --container-name "${AZURECONTAINER}" -f "$the_file" -n "postgres/${target_file}" done rm -rf "$PGBACKUPDIR" fi echo "stopping postgres" >&2 pg_ctlcluster --force $PGVERSION main stop rm -f "/var/run/docassemble/status-postgres-running" exit 0 } trap stopfunc SIGINT SIGTERM #source /usr/share/postgresql-common/init.d-functions if [ -d /var/run/postgresql ]; then chmod 2775 /var/run/postgresql else install -d -m 2775 -o postgres -g postgres /var/run/postgresql fi mkdir -p "/var/run/postgresql/${PGVERSION}-main.pg_stat_tmp" chown -R postgres:postgres "/var/run/postgresql/${PGVERSION}-main.pg_stat_tmp" touch "/var/run/docassemble/status-postgres-running" su postgres -c "/usr/lib/postgresql/${PGVERSION}/bin/postgres -D /var/lib/postgresql/${PGVERSION}/main -c config_file=/etc/postgresql/${PGVERSION}/main/postgresql.conf" & wait %1