lpstat -t >& /tmp/lpstat.t.out.`date +\%Y.\%m` &
egrep "unknown printer" /tmp/lpstat.t.out|nawk -F':' '{print $3}'|\
sed -e '/^$/d' > /tmp/unknown.printers.`date +\%Y.\%m.\%d`
Use rm_printer.sh
to delete defunct printers found by above operation.
rm_printer.sh reads
#!/bin/sh
infile=unknown.printers.`date +\%Y.\%m.\%d`
echo $infile
for printer in `cat $infile`
do
/usr/ucb/lpq -P $printer
lpadmin -x $printer
done
exit 0
./rm_printer.sh
to delete the unknown printers
[From an article, whose source is no longer available, formerly at http://x56.deja.com/=dnc/[ST_rn=ps]/getdoc.xp?AN=600723009&CONTEXT=981406799.1185087491&hitnum=3)]
"Printd delivers print jobs to remote printers. Print jobs for remote printers are queued in the /var/spool/print directory (jobs for local or network printers are queued in directories under /var/spool/lp)
When Solaris boots up, the /etc/rc2.d/S80spc startup script runs printd to flush any jobs in /var/spool/print to their printers. When it's finished sending the print jobs that were there at boot time, printd exits.
Print jobs placed in /var/spool/print by lp/lpr commands, or by in.lpd spawn a background process to deliver the job to the remote printer."
So as long as there were jobs spooled for these defunct printers in /var/spool/printd, printd will hammer away, trying to print them.
Solution:
lpadmin -x defunct printer
/etc/init.d/lp stop
/etc/init.d/lp start
rm or mv or whatever pleases you the files in /var/spool/print
for these defunct printers.
You may need to delete the .printd.lock file there, too.
/etc/init.d/spc stop /etc/init.d/spc start
[stop and start printd]
If /var/spool/print is clear, printd should go away ...
#!/bin/sh for printer in `cat printers.list` do lpq -P $printer >> printers.log done exit 0
egrep "unknown printer" printers.log | nawk -F':' '{print $3}' | sed -e '/^$/d' | sed -e 's/^ //' > /tmp/unknown.printers
NOTE WELL: steps involving sed work ONLY
if /etc/printcap has ONE line per printer!!!
NOTE WELL: If /etc/printcap has MULTIPLE lines per printer,
do NOT use sed method shown below.
delete the defunct printers by an editor or other method.
sed -f make_deletes.sed < unknown.printers > unknown_printers.sedmake_deletes.sed
s/.*$/\/^&\/d/
sed -f unknown_printers.sed < /etc/printcap > printcap.new
#!/bin/sh # # run this in /var/spool/lpd # for dir in `cat /tmp/unknown.printers` do /bin/rm -rf /var/spool/lpd/$dir done exit 0