Script desbloquearimpresoras | Algo de Linux

miércoles, 3 de mayo de 2017

Script desbloquearimpresoras

Para evitar el bloqueo permanente de impresoras, utilizo un script que se ejecuta de forma periódica mediante una tarea cron. Este script evita el bloqueo que se produce en determinadas situaciones.
# cat /usr/local/bin/desbloquearimpresoras
#!/bin/bash
# ------------------------------------------------------------
# script:  /usr/local/bin/desbloquearimpresoras
# Author:  Esteban M. Navas Martín
# Date:    27-04-2014
# Ver:     03-05-2017
#
# Purpose: Unlock printers and jobs

# Copyright (c) 2012-2017 Esteban M. Navas Martín . All rights reserved.
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.

#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#   You should have received a copy of the GNU General Public License
#   along with this program. If not, see .

idioma=$LC_ALL
export LC_ALL=en_US.UTF-8

# Definimos una antiguedad maxima de trabajos de 10 minutos
antiguedad=10

# Obtenemos la lista de impresoras
lpstat -s > /tmp/impresoras

#  Identificar impresoras locales y asegurar que esten operativas
while read linea; do
  impresora=`echo $linea | grep 'device' | awk '{print$3}' | cut -f1 -d":"`
  impresoradesconectada=`lpstat -o -p $impresora | grep Unplugged`
  impresorapausada=`lpstat -o -p $impresora | grep Paused`
  impresorarechazandojobs=`lpstat -o -p $impresora | grep Rejecting`

  if [ "$impresorarechazandojobs" ]; then
     cupsaccept $impresora
  fi

  if [ "$impresorapausada" ]; then
     cupsenable $impresora
  fi

done < /tmp/impresoras

# Obtenemos el estado de los trabajos de las impresoras
lpstat -o | awk '{print$1,$5,$6,$7,$8}'>/tmp/trabajosimpresora

# Procesamos cada trabajo
while read trabajo; do
  impresora=`echo ${trabajo%-*}`
  numtrabajo=`echo ${trabajo##*-} | cut -f1 -d" "`
  fechatrabajo=$(date -d "`echo $trabajo | awk '{print$6,$7,$8}'`" "+%s")
  fechaactual=`date +%s`
  diferencia=$(((fechaactual-fechatrabajo) / 60))
  impresoradesconectada=`lpstat -o -p $impresora | grep Unplugged`

  if [ ! $impresoradesconectada ]; then
     if [ $diferencia -gt $antiguedad ]; then
        cancel $numtrabajo
     fi
  fi

done < /tmp/trabajosimpresora

export LC_ALL=$idioma
Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: