Can we limit the number of active jobs on a given printer?
Kai Lanz
lanz at stanford.edu
Fri Jun 18 10:40:50 PDT 2010
> As you backend is a shell scrip, please post (an URL to) it. When looking
> into it, perhaps a (partly) solution might come to my mind ...
Here it is. For brevity, I've removed our boilerplate comments and some of the error-checking code.
---
#! /bin/sh
qname="BINPS"
domain="stanford.edu"
DB_DIR=/var/adm/printerdb
if [ $# -eq 0 ]; then
echo "direct qcsendpr \"Unknown\" \"Send data to printer via LPRng.\""
exit 0
fi
if [ $# -ne 5 -a $# -ne 6 ]; then
echo "Usage: qcsendpr jobid user title copies options [file]"
echo " Example for device-URI: 'qcsendpr:escher'"
echo ""
fi
FILE=$6 || FILE="-";
printer=${DEVICE_URI#qcsendpr:}
# Has the current top job been released for printing?
#
# Get the job_id number of the first job in the queue for this printer:
job=`/usr/local/bin/mylpq $printer | /usr/bin/head -1 | /bin/cut -d' ' -f 2`
# Search DB file to see if this job is listed
/bin/egrep -q ^[\ ]*$job" " $DB_DIR/$printer.db
grepstatus=$?
# If the job has been released, pass it to LPRng lpr via the usual filter
# pipeline.
# dosprstrip: remove leading ctrl-D if present
# hppjlstrip: remove HP PJL header and trailer if present
# LPRng options: -k = do not create a temp file; send direct to printer
# -Y = do not spool; send direct to printer
if [ $grepstatus -eq 0 ]; then
/bin/cat $FILE | /usr/local/etc/dosprstrip | /usr/local/etc/hppjlstrip | \
/usr/bin/enscript -B -h -p- -q -Z | \
/usr/local/sbin/lpr -h -Y -k -P ${qname}@${printer}.${domain}
# Now flag the job as printed in the DB file by appending a "p" to the
# job number (this ensures it will not match future jobs).
/bin/sed -e "s/\(^[\ ]*\) ${job} /\1${job}p /" $DB_DIR/$printer.db > $DB_DIR/$printer.db.new
/bin/mv $DB_DIR/$printer.db.new $DB_DIR/$printer.db
/bin/chmod 664 $DB_DIR/$printer.db
exit 0
else
# If the current top job in the queue hasn't been released for printing,
# stop the queue and exit with "failed" status so job will remain in queue:
/usr/bin/cupsdisable $printer
exit 1
fi
More information about the cups
mailing list