@@ -56,11 +56,13 @@ until confd -onetime -node "$ETCD" -confdir /app --log-level error; do
5656 sleep $(( ETCD_TTL/ 2 )) # sleep for half the TTL
5757done
5858
59+ PG_DATA_DIR=/var/lib/postgresql/9.3/main
60+
5961# initialize database if one doesn't already exist
6062# for example, in the case of a data container
61- if [[ ! -d /var/lib/postgresql/9.3/main ]]; then
63+ if [[ ! -d $PG_DATA_DIR ]]; then
6264 chown -R postgres:postgres /var/lib/postgresql
63- sudo -u postgres /usr/bin/initdb -D /var/lib/postgresql/9.3/main
65+ sudo -u postgres /usr/bin/initdb -D $PG_DATA_DIR
6466fi
6567
6668# ensure WAL log bucket exists
@@ -69,24 +71,24 @@ INIT_ID=$(etcdctl -C "$ETCD" get "$ETCD_PATH/initId" 2> /dev/null || echo none)
6971echo " database: expecting initialization id: $INIT_ID "
7072
7173initial_backup=0
72- if [[ " $( cat /var/lib/postgresql/9.3/main /initialized 2> /dev/null) " != " $INIT_ID " ]]; then
74+ if [[ " $( cat $PG_DATA_DIR /initialized 2> /dev/null) " != " $INIT_ID " ]]; then
7375 echo " database: no existing database found or it is outdated."
7476 # check if there are any backups -- if so, let's restore
7577 # we could probably do better than just testing number of lines -- one line is just a heading, meaning no backups
7678 if [[ $( envdir /etc/wal-e.d/env wal-e --terse backup-list | wc -l) -gt " 1" ]]; then
7779 echo " database: restoring from backup..."
78- rm -rf /var/lib/postgresql/9.3/main
79- sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-fetch /var/lib/postgresql/9.3/main LATEST
80- chown -R postgres:postgres /var/lib/postgresql/9.3/main
81- chmod 0700 /var/lib/postgresql/9.3/main
82- echo " restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch \" %f\" \" %p\" '" | sudo -u postgres tee /var/lib/postgresql/9.3/main /recovery.conf > /dev/null
80+ rm -rf $PG_DATA_DIR
81+ sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-fetch $PG_DATA_DIR LATEST
82+ chown -R postgres:postgres $PG_DATA_DIR
83+ chmod 0700 $PG_DATA_DIR
84+ echo " restore_command = 'envdir /etc/wal-e.d/env wal-e wal-fetch \" %f\" \" %p\" '" | sudo -u postgres tee $PG_DATA_DIR /recovery.conf > /dev/null
8385 else
8486 echo " database: no backups found. Initializing a new database..."
8587 initial_backup=1
8688 fi
8789 # either way, we mark the database as initialized
8890 INIT_ID=$( cat /proc/sys/kernel/random/uuid)
89- echo " $INIT_ID " > /var/lib/postgresql/9.3/main /initialized
91+ echo " $INIT_ID " > $PG_DATA_DIR /initialized
9092 etcdctl --no-sync -C " $ETCD " set " $ETCD_PATH /initId" " $INIT_ID " > /dev/null
9193else
9294 echo " database: existing data directory found. Starting postgres..."
@@ -116,15 +118,15 @@ trap on_exit INT TERM
116118confd -node " $ETCD " -confdir /app --log-level error --interval 5 &
117119
118120# wait for the service to become available
119- sleep 1 && while [[ -z $( netstat -lnt | awk " \$ 6 == \" LISTEN \" && \$ 4 ~ \" .5432 \" && \$ 1 ~ \" tcp.? \" " ) ]] ; do sleep 1; done
121+ until sudo -u postgres psql -l -t > /dev/null 2>&1 ; do sleep 1; done
120122
121123# perform a one-time reload to populate database entries
122124/usr/local/bin/reload
123125
124126if [[ " ${initial_backup} " == " 1" ]] ; then
125127 echo " database: performing an initial backup..."
126128 # perform an initial backup
127- sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-push /var/lib/postgresql/9.3/main
129+ sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-push $PG_DATA_DIR
128130fi
129131
130132sudo -Eu postgres /app/bin/backup &
@@ -140,7 +142,7 @@ if [[ ! -z $EXTERNAL_PORT ]]; then
140142 set +e
141143
142144 # wait for the service to become available on PORT
143- sleep 1 && while [[ -z $( netstat -lnt | awk " \$ 6 == \" LISTEN \" && \$ 4 ~ \" . $PORT \" && \$ 1 ~ \" $PROTO .? \" " ) ]] ; do sleep 1; done
145+ until sudo -u postgres psql -l -t > /dev/null 2>&1 ; do sleep 1; done
144146
145147 # while the port is listening, publish to etcd
146148 while [[ ! -z $( netstat -lnt | awk " \$ 6 == \" LISTEN\" && \$ 4 ~ \" .$PORT \" && \$ 1 ~ \" $PROTO .?\" " ) ]] ; do
0 commit comments