[Samba] Replicating printers, drivers, and settings between machines

Jeremy Nelson jnelson at canterburyschool.org
Thu Dec 1 03:18:02 GMT 2005

For backup and redundancy purposes, I've been needing to replicate CUPS 
printer queues between two Samba servers, and came up with the following 
shell script. 

We use a fairly sizable number of CUPS printer queues printing in RAW 
mode, and install the printer drivers from the Windows clients, so all 
clients actually download the printer driver from Samba at first use.

WARNING: This script destroys your CUPS printer configuration 
(printers.conf), your Windows point and print drivers, and your Samba 
printer definitions and settings.  It also copies the TDB files from a 
server WITHOUT stopping Samba, so it's possible you could get 
corruption.  I don't recommend running this as a cron job.

Any recommendations to improve this script would be much appreciated.


# Replicate Printer queues, drivers, and settings between machines
# Script was written on a Gentoo server running 2.6.12 using standard ebuilds of Samba 3.0.14a-r2 and CUPS 1.1.23-r1
# Jeremy Nelson
# Canterbury School
# 30 Nov 2005

[ $# -ne 1 ] && echo "Server name required for $0" && exit 0

# Copy CUPS Printer definitions, then restart CUPS

/usr/bin/scp root@$1:/etc/cups/printers.conf /etc/cups/
/usr/bin/killall -SIGHUP cupsd

# Copy Point and Print Driver Database
/usr/bin/rm -rf /var/lib/samba/printers
/usr/bin/scp -p -r root@$1:/var/lib/samba/printers /var/lib/samba/

# Make backups of the TDBs for future use in case these get corrupted
/usr/bin/ssh $1 -C "cd /var/cache/samba/;/usr/bin/tdbbackup *.tdb"
/usr/bin/ssh $1 -C "cd /var/cache/samba/printing/;/usr/bin/tdbbackup *.tdb"

# Stop Samba
/etc/init.d/samba stop

# Make sure it's REALLY dead
/usr/bin/killall -9 smbd
/usr/bin/killall -9 nmbd
/etc/init.d/samba zap

# Copy the TDBs for the printer definitions and the individual printers

/usr/bin/rm /var/cache/samba/ntprinters.tdb
/usr/bin/rm /var/cache/samba/printing/*.tdb
/usr/bin/scp -p root@$1:/var/cache/samba/ntprinters.tdb /var/cache/samba/
/usr/bin/scp -p root@$1:/var/cache/samba/printing/*.tdb /var/cache/samba/printing

# Restart Samba
/etc/init.d/samba start

More information about the samba mailing list