Files
mastering-unix-ss/chapter25/PQ_all_in_one.ksh
Fabio Scotto di Santolo 4cc88d2f6e initial commit
2020-07-28 19:28:25 +02:00

338 lines
8.7 KiB
Bash
Executable File

#!/bin/ksh
#
# SCRIPT: PQ_all_in_one.ksh
#
# AUTHOR: Randy Michael
# DATE: 08/14/2007
# REV: 2.1.P
#
# PLATFORM/SYSTEMS: AIX, CUPS, HP-UX, Linux, OpenBSD, and Solaris
#
# PURPOSE: This script is used to enable printing and queuing on
# AIX, CUPS, HP-UX, Linux, OpenBDS, and Solaris
#
# REV LIST:
#
# set -x # Uncomment to debug this script
# set -n # Uncomment to check syntax without any execution
#
###################################################
# DEFINE FUNCTIONS HERE
###################################################
function AIX_classic_printing
{
for Q in $( enq -AW | tail +3 | grep DOWN | awk '{print $1}')
do
enable $Q
(( $? == 0 )) || echo "\n$Q print queue FAILED to enable.\n"
done
}
##########################################################
function AIX_SYSV_printing
{
LOOP=0 # Loop Counter - To grab three lines at a time
lpc status all | egrep ':|printing|queueing' | while read LINE
do
# Load three unique lines at a time
case $LINE in
*:) Q=$(echo $LINE | cut -d ':' -f1)
;;
printing*)
PSTATUS=$(echo $LINE | awk '{print $3}')
;;
queueing*)
QSTATUS=$(echo $LINE | awk '{print $3}')
;;
esac
# Increment the LOOP counter
(( LOOP = LOOP + 1 ))
if ((LOOP == 3)) # Do we have all three lines of data?
then
# Check printing status
case $PSTATUS in
disabled) lpc start $Q >/dev/null
(($? == 0)) && echo "\n$Q printing re-started\n"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
# Check queuing status
case $QSTATUS in
disabled) lpc enable $Q >/dev/null
(($? == 0)) && echo "\n$Q queueing re-enabled\n"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
LOOP=0 # Reset the loop counter to zero
fi
done
}
##########################################################
function CUPS_printing
{
LOOP=0 # Loop Counter - To grab three lines at a time
lpc status all | egrep .:|printing|queuing. | while read LINE
do
# Load three unique lines at a time
case $LINE in
*:) Q=$(echo $LINE | cut -d .:. -f1)
;;
printing*)
PSTATUS=$(echo $LINE | awk .{print $3}.)
;;
queuing*)
QSTATUS=$(echo $LINE | awk .{print $3}.)
;;
esac
# Increment the LOOP counter
(( LOOP = LOOP + 1 ))
if ((LOOP == 3)) # Do we have all three lines of data?
then
# Check printing status
case $PSTATUS in
disabled) cupsenable $Q >/dev/null
(($? == 0)) && echo -e "\n$Q printing re-started\n"
sleep 1
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
# Check queuing status
case $QSTATUS in
disabled) accept $Q # >/dev/null
(($? == 0)) && echo -e "\n$Q queueing re-enabled\n"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
LOOP=0 # Reset the loop counter to zero
fi
done
}
#######################################################
function HP_UX_printing
{
lpstat | grep Warning: | while read LINE
do
if (echo $LINE | grep 'is down') > /dev/null
then
enable $(echo $LINE | awk '{print $3}')
fi
if (echo $LINE | grep 'queue is turned off') >/dev/null
then
accept $(echo $LINE | awk '{print $3}')
fi
done
}
################################################################33
function Linux_printing
{
lpc status | tail +2 | while read pqstat[1] pqstat[2] pqstat[3] junk
do
# First check the status of printing for each printer
case ${pqstat[2]} in
disabled)
# Printing is disable - print status and restart printing
echo "${pqstat[1]} Printing is ${pqstat[2]}"
lpc start ${pqstat[1]}
(($? == 0)) && echo "${pqstat[1]} Printing Restarted"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
# Next check the status of queueing for each printer
case ${pqstat[3]} in
disabled)
echo "${pqstat[1]} Queueing is ${pqstat[3]}"
lpc enable ${pqstat[1]}
(($? == 0)) && echo "${pqstat[1]} Printing Restarted"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
done
}
###############################################################
function OpenBSD_printing
{
LOOP=0 # Loop Counter - To grab three lines at a time
lpc status all | egrep ':|printing|queuing' | while read LINE
do
# Load three unique lines at a time
case $LINE in
*:) Q=$(echo $LINE | cut -d ':' -f1)
;;
printing*)
PSTATUS=$(echo $LINE | awk '{print $3}')
;;
queuing*)
QSTATUS=$(echo $LINE | awk '{print $3}')
;;
esac
# Increment the LOOP counter
(( LOOP = LOOP + 1 ))
if ((LOOP == 3)) # Do we have all three lines of data?
then
# Check queuing status
case $QSTATUS in
disabled) lpc enable $Q >/dev/null
(($? == 0)) && echo "\n$Q queueing re-enabled\n"
sleep 1
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
# Check printing status
case $PSTATUS in
disabled) lpc up $Q >/dev/null
(($? == 0)) && echo "\n$Q printing re-started\n"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
LOOP=0 # Reset the loop counter to zero
fi
done
}
#######################################################
function Solaris_printing
{
LOOP=0 # Loop Counter - To grab three lines at a time
lpc status all | egrep ':|printing|queueing' | while read LINE
do
# Load three unique lines at a time
case $LINE in
*:) Q=$(echo $LINE | cut -d ':' -f1)
;;
printing*)
PSTATUS=$(echo $LINE | awk '{print $3}')
;;
queueing*)
QSTATUS=$(echo $LINE | awk '{print $3}')
;;
esac
# Increment the LOOP counter
(( LOOP = LOOP + 1 ))
if ((LOOP == 3)) # Do we have all three lines of data?
then
# Check printing status
case $PSTATUS in
disabled) lpc start $Q >/dev/null
(($? == 0)) && echo "\n$Q printing re-started\n"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
# Check queuing status
case $QSTATUS in
disabled) lpc enable $Q >/dev/null
(($? == 0)) && echo "\n$Q queueing re-enabled\n"
;;
enabled|*) : # No-Op - Do Nothing
;;
esac
LOOP=0 # Reset the loop counter to zero
fi
done
}
######################################################
############### BEGINNING OF MAIN ####################
######################################################
# Is CUPS Running? If CUPS is running we can just
# run the CUPS standard commands.
ps auxw | grep -q [c]upsd
if (( $? == 0 ))
then
CUPS_printing
exit $?
fi
# What OS are we running?
# To start with we need to know the UNIX flavor.
# This case statement runs the uname command to
# determine the OS name. Different functions are
# used for each OS to restart printing and queuing.
case $(uname) in
AIX) # AIX okay...Which printer subsystem?
# Starting with AIX 5L we support System V printing also!
# Check for an active qdaemon using the SRC lssrc command
if (ps -ef | grep '/usr/sbin/qdaemon' | grep -v grep) >/dev/null 2>&1
then
# Standard AIX printer subsystem found
AIX_PSS=CLASSIC
elif (ps -ef | grep '/usr/lib/lp/lpsched' | grep -v grep)
then
# AIX System V printer service is running
AIX_PSS=SYSTEMV
fi
# Call the correct function for Classic AIX or SysV printing
case $AIX_PSS in
CLASSIC) # Call the classic AIX printing function
AIX_classic_printing
;;
SYSTEMV) # Call the AIX SysV printing function
AIX_SYSV_printing
;;
esac
;;
HP-UX) # Call the HP-UX printing function
HP_UX_printing
;;
Linux) # Call the Linux printing function
Linux_printing
;;
OpenBSD) # Call the OpenBSD printing function
OpenBSD_printing
;;
SunOS) # Call the Soloris printing function
Solaris_printing
;;
*) # Anything else is unsupported.
echo "\nERROR: Unsupported Operating System: $(uname)\n"
echo "\n\t\t...EXITING...\n"
;;
esac