Skip to content

Instantly share code, notes, and snippets.

@gerald-kim
Created October 26, 2009 07:21
Show Gist options
  • Save gerald-kim/218476 to your computer and use it in GitHub Desktop.
Save gerald-kim/218476 to your computer and use it in GitHub Desktop.
#!/bin/bash
#DB_CONSTR='-h host -u user -ppasswd -P 20306 searchms'
#SQL='select * from foo'
#FILTER='{ printf "%s\n", $0 }'
SCRIPTFILE=`basename $0`
OUTFILE=${SCRIPTFILE/.sh/.txt}
JOBNAME=${SCRIPTFILE/.sh/}
SCRIPTDIR=$( (cd -P $(dirname $0) && pwd) )
DATADIR=${SCRIPTDIR/batch\/src/batch\/data}
function begin_dump {
#clean up old dump
if [[ -e $DATADIR/$OUTFILE.new ]]; then
rm $DATADIR/$OUTFILE.new
fi
#log
echo "start job $JOBNAME on `date '+%Y-%m-%d %H:%M'`"
if [[ $IZUMI_LOGID -gt 0 ]]; then
sh /home/www/batch/src/izumi/log-start.sh $IZUMI_LOGID
fi
}
function end_dump {
#dump to tokyocabinet hash db
if [[ $DATADIR/$OUTFILE =~ .db$ ]]; then
echo "DB output"
mv $DATADIR/$OUTFILE.new $DATADIR/$OUTFILE.tsv
/usr/local/bin/tchmgr importtsv $DATADIR/$OUTFILE.new $DATADIR/$OUTFILE.tsv
/usr/local/bin/tchmgr optimize -tb $DATADIR/$OUTFILE.new
fi
#check difference with previous dump
diff -q $DATADIR/$OUTFILE $DATADIR/$OUTFILE.new
DIFF=$?
if [[ $DIFF -eq 0 ]]; then
rm $DATADIR/$OUTFILE.new
else
mv $DATADIR/$OUTFILE.new $DATADIR/$OUTFILE
fi
#log
echo "end time:`date +%y%m%d-%H:%M`"
if [[ $IZUMI_LOGID -gt 0 ]]; then
sh /home/www/batch/src/izumi/log-end.sh $IZUMI_LOGID
fi
}
function run_dump {
if [[ -e $DATADIR/$JOBNAME.pipe ]]; then rm $DATADIR/$JOBNAME.pipe; fi
mkfifo $DATADIR/$JOBNAME.pipe
#echo $SQL | /usr/local/mysql/bin/mysql --disable-column-names --batch $DB_CONSTR | gawk -F "\t" "$FILTER" >> $DATADIR/$OUTFILE.new
gawk -F "\t" "$FILTER" < $DATADIR/$JOBNAME.pipe >> $DATADIR/$OUTFILE.new &
echo $SQL | /usr/local/mysql/bin/mysql --disable-column-names --batch $DB_CONSTR > $DATADIR/$JOBNAME.pipe
#log error
if [[ $IZUMI_LOGID -gt 0 && ! $? -eq 0 ]]; then
sh /home/www/batch/src/izumi/log.sh -l ERROR $IZUMI_LOGID "Can not connect to mysql database."
fi
if [[ -e $DATADIR/$JOBNAME.pipe ]]; then rm $DATADIR/$JOBNAME.pipe; fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment