#!/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 log() { logger -i -t $program -s "$*"; } function die() { log "$*; 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/$program && 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 [ "$DBTIME" ] || DBTIME=$state/update-db.time [ "$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 echo "$$" > $PIDFILE chmod a+rw $PIDFILE log "Updating local database from $DBDUMP ..." python ietf/manage.py dbshell < $DBDUMP log "Updating local database from $DBFIX ..." python ietf/manage.py dbshell < $DBFIX log "Running Django syncdb ..." python ietf/manage.py syncdb touch -r $DBDUMP $DBTIME touch $DBDONE log "Done." # else # echo "No new database dump available." fi rm -rf $DBLOCK exit 0 else pid=$(< $PIDFILE ) || die "Couldn't read pidfile '$PIDFILE'" if kill -0 $pid; then log "Pidfile for process $pid exists, and process is running. Sleeping." sleep 10 else log "Pidfile for process $pid exists, but process isn't running." log "Removing lock and old pid file $pidfile." rm -rf $DBLOCK fi fi done