85 lines
2.8 KiB
Bash
Executable file
85 lines
2.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# push in a new copy of the database from a dump of the master database, and
|
|
# do the fixups needed to run the django apps.
|
|
|
|
program=${0##*/}
|
|
progdir=${0%/*}
|
|
|
|
cd $progdir/..
|
|
build=$PWD
|
|
|
|
function die() { echo "$*; terminating."; echo "$program: Error: $*" 1>&2; exit 1; }
|
|
|
|
|
|
for dir in /var/local /var/state /var/run /var/tmp; do
|
|
[ -d $dir -a -w $dir ] && state=$dir/$program && break
|
|
done
|
|
[ "$state" ] || die "Couldn't find a directory to keep state in."
|
|
[ -d "$state" ] || mkdir $state
|
|
[ "$state" ] || die "Couldn't create state dir."
|
|
|
|
|
|
for dir in $DBLOCK /var/lock /var/state /var/run /var/tmp; do
|
|
[ -d $dir -a -w $dir ] && lock=$dir/ietfdb && break
|
|
done
|
|
[ "$lock" ] || die "Couldn't find a directory to keep lock in."
|
|
|
|
[ "$DBDUMP" ] || DBDUMP="$1"
|
|
[ "$DBDUMP" ] || DBDUMP=/www/tools.ietf.org/events/raw/sqldump/sqldump.raw
|
|
[ "$DBFIX" ] || DBFIX=$build/test/sql_fixup.sql
|
|
[ "$DBSANE" ] || DBSANE=$build/test/sql_sanitize.sql
|
|
[ "$DBTEST" ] || DBTEST=$build/test/sql_setup.sql
|
|
[ "$DBTIME" ] || DBTIME=$state/update-db.dump
|
|
[ "$DBSTART" ] || DBSTART=$state/update-db.start
|
|
[ "$DBDONE" ] || DBDONE=$state/update-db.done
|
|
[ "$DBLOCK" ] || DBLOCK=$lock
|
|
|
|
PIDFILE=$DBLOCK/pid
|
|
|
|
while true; do
|
|
if mkdir $DBLOCK; then
|
|
chmod a+rwx $DBLOCK
|
|
#echo ""
|
|
#date +"Time: %Y-%m-%d %H:%M"
|
|
#echo "Database dump file is from $(date -r $DBDUMP +'%Y-%m-%d %H:%M')."
|
|
#echo "Last update done $(date -r $DBDONE +'%Y-%m-%d %H:%M')."
|
|
if [ $DBDUMP -nt $DBTIME ]; then
|
|
export PYTHONPATH=$PWD
|
|
echo "Updating database dated $(date -r $DBDONE +'%Y-%m-%d %H:%M') from dump with time $(date -r $DBDUMP +'%Y-%m-%d %H:%M')"
|
|
#echo -n "Updating database from dump with time $(date -r $DBDUMP +'%Y-%m-%d %H:%M')... " 1>&2
|
|
|
|
echo "$$" > $PIDFILE
|
|
chmod a+rw $PIDFILE
|
|
touch -r $DBDUMP $DBTIME
|
|
touch $DBSTART
|
|
echo "Updating local database from $DBDUMP ..."
|
|
python ietf/manage.py dbshell < $DBDUMP
|
|
echo "Updating local database from $DBFIX ..."
|
|
python ietf/manage.py dbshell < $DBFIX
|
|
echo "Updating local database from $DBSANE ..."
|
|
python ietf/manage.py dbshell < $DBSANE
|
|
echo "Updating local database from $DBTEST ..."
|
|
python ietf/manage.py dbshell < $DBTEST
|
|
echo "Running Django syncdb ..."
|
|
python ietf/manage.py syncdb
|
|
touch $DBDONE
|
|
echo "Done."
|
|
#echo "Done." 1>&2
|
|
else
|
|
echo "Database is up-to-date (updated $(date -r $DBDONE +'%Y-%m-%d %H:%M') from dump with time $(date -r $DBDUMP +'%Y-%m-%d %H:%M'))"
|
|
fi
|
|
rm -rf $DBLOCK
|
|
exit 0
|
|
else
|
|
pid=$(< $PIDFILE ) || die "Couldn't read pidfile '$PIDFILE'"
|
|
if kill -0 $pid; then
|
|
echo "Pidfile for process $pid exists, and process is running. Sleeping."
|
|
sleep 10
|
|
else
|
|
echo "Pidfile for process $pid exists, but process isn't running."
|
|
echo "Removing lock and old pid file $pidfile."
|
|
rm -rf $DBLOCK
|
|
fi
|
|
fi
|
|
done |