[Mailman-Users] How to Back Up Lists

Fil fil at rezo.net
Fri May 4 23:44:23 CEST 2001


@ Christopher VanOosterhout (chris at vanoosterhout.com) :
> How do I make backups of my lists?  What files are critical?

Here's what I use as a daily cron job.

#!/bin/sh

#################### mailman_save_lists.sh #####################
# v0.13 2000-10-20 18:30
#
# this script saves a copy of mailman lists and config files
# call this script regularly from the 'mailman' user
# e.g. daily from crontab 
# 01 08 * * * /path/to/mailman_save_lists.sh
#
# we do save lists each time in compressed form: either they
# are big and we can imagine they change each time, or they
# are very small and we don't care
#
# comments to: <fil+mailman at bok.net>
#
# please configure below: where lists are to be found,
# and where states are to be saved (must be 'mailman'-writable)
########
lists=/var/lib/mailman/lists/
state=/var/state/mailman/
########

cd $lists || exit 1

umask 026	# make files readable to mailman group only

for i in `ls` ; do
	echo 
	echo ==================
	echo $i

	k=$state$i
	mkdir -p $k || exit 1

	j=`date +%Y-%m-%d`

	/usr/lib/mailman/bin/config_list -o $k/config-$i.new $i
	if [ -s $k/config-$i ]; then
		diff -d -I "^## captured on" \
			$k/config-$i $k/config-$i.new > /tmp/diffconfig.$$
	else
		cp $k/config-$i.new /tmp/diffconfig.$$
	fi
	mv $k/config-$i.new $k/config-$i
	if [ -s /tmp/diffconfig.$$ ]; then
		echo "config modif ------------------------------"
		cat /tmp/diffconfig.$$
		echo "-------------------------------------------"
		cp $k/config-$i $k/config-$i-$j
		gzip -qf $k/config-$i-$j
	fi
	rm /tmp/diffconfig.$$

	/usr/lib/mailman/bin/list_members $i | sort > $k/$i-new
	printf "%10s members\n" `cat $k/$i-new | wc -l`
	if [ -s $k/$i ]; then
		diff -d $k/$i $k/$i-new > /tmp/difflist.$$
		if [ -s /tmp/difflist.$$ ]; then
			grep "^>" /tmp/difflist.$$ > /tmp/difflistplus.$$
			grep "^<" /tmp/difflist.$$ > /tmp/difflistminus.$$
			if [ -s /tmp/difflistplus.$$ ]; then
				printf " + %7s\n" `cat /tmp/difflistplus.$$ | wc -l`
			fi
			if [ -s /tmp/difflistminus.$$ ]; then
				printf " - %7s\n" `cat /tmp/difflistminus.$$ | wc -l`
			fi
			cat /tmp/difflistplus.$$ /tmp/difflistminus.$$
			rm /tmp/difflistplus.$$ /tmp/difflistminus.$$
		fi
		rm /tmp/difflist.$$
	else
		echo "new list !"
		cat $k/$i-new
	fi
	mv $k/$i-new $k/$i
	cp $k/$i $k/$i-$j
	gzip -qf $k/$i-$j

	# suppress last month's files
	# with two weeks security delay
	n=`date +%Y-%m --date "-1 month -2 week"`
	if [ -e $k/$i-$n-01.gz ]; then
		mv $k/$i-$n-01.gz $k/$i-$n.gz
		rm -f $k/$i-$n-??.gz
	fi
done
# END SCRIPT


-- Fil





More information about the Mailman-Users mailing list