@@ -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..."
@@ -111,15 +113,15 @@ trap on_exit INT TERM
111113confd -node " $ETCD " -confdir /app --log-level error --interval 5 &
112114
113115# wait for the service to become available
114- sleep 1 && while [[ -z $( netstat -lnt | awk " \$ 6 == \" LISTEN \" && \$ 4 ~ \" .5432 \" && \$ 1 ~ \" tcp.? \" " ) ]] ; do sleep 1; done
116+ until sudo -u postgres psql -l -t > /dev/null 2>&1 ; do sleep 1; done
115117
116118# perform a one-time reload to populate database entries
117119/usr/local/bin/reload
118120
119121if [[ " ${initial_backup} " == " 1" ]] ; then
120122 echo " database: performing an initial backup..."
121123 # perform an initial backup
122- sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-push /var/lib/postgresql/9.3/main
124+ sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-push $PG_DATA_DIR
123125fi
124126
125127sudo -Eu postgres /app/bin/backup &
@@ -135,7 +137,7 @@ if [[ ! -z $EXTERNAL_PORT ]]; then
135137 set +e
136138
137139 # wait for the service to become available on PORT
138- sleep 1 && while [[ -z $( netstat -lnt | awk " \$ 6 == \" LISTEN \" && \$ 4 ~ \" . $PORT \" && \$ 1 ~ \" $PROTO .? \" " ) ]] ; do sleep 1; done
140+ until sudo -u postgres psql -l -t > /dev/null 2>&1 ; do sleep 1; done
139141
140142 # while the port is listening, publish to etcd
141143 while [[ ! -z $( netstat -lnt | awk " \$ 6 == \" LISTEN\" && \$ 4 ~ \" .$PORT \" && \$ 1 ~ \" $PROTO .?\" " ) ]] ; do
0 commit comments