#! /bin/sh # First argument is seconds between running everything period=${1:-60} BIN=${CTF_BASE:-/opt/mcp}/bin WWW=${CTF_BASE:-/var}/www STATE=${CTF_BASE:-/var/lib/ctf} NEWPOINTS=$STATE/points.new POINTS=$STATE/points.log SCOREBOARD=$WWW/scoreboard.html if ! [ -f $SCOREBOARD ]; then $BIN/scoreboard < $POINTS > $SCOREBOARD fi while true; do start=$(date +%s) next=$(expr $start + $period) # Collect any new points for fn in $NEWPOINTS/*; do [ -f $fn ] || continue cat $fn >> $POINTS || break rm $fn done # Render scoreboard if [ $POINTS -nt $SCOREBOARD ]; then $BIN/scoreboard < $POINTS > $SCOREBOARD.new && mv $SCOREBOARD.new $SCOREBOARD fi now=$(date +%s) if [ $now -lt $next ]; then sleep $(expr $next - $now) fi done