13e12c5d1SDavid du Colombier#!/bin/rc 2219b2ee8SDavid du Colombierrfork s 3219b2ee8SDavid du Colombier 4219b2ee8SDavid du Colombierif (! ~ $DEBUG '') flag x + 53e12c5d1SDavid du Colombier 63e12c5d1SDavid du ColombierLPDELAY=60 73e12c5d1SDavid du Colombier 83e12c5d1SDavid du Colombierif (! ~ $#* 2 && ! ~ $#* 3) { 93e12c5d1SDavid du Colombier echo 'usage generic local_cmd _remote_cmd [ success_cmd ]' >[1=2] 103e12c5d1SDavid du Colombier exit 'argument count' 113e12c5d1SDavid du Colombier} 123e12c5d1SDavid du ColombierLOCAL_CMD=$1 133e12c5d1SDavid du ColombierREMOTE_CMD=$2 143e12c5d1SDavid du ColombierSUCCESS_CMD=$3 153e12c5d1SDavid du Colombier 16219b2ee8SDavid du Colombier# we don't want to make a LOCK file unless we are at the destination 17219b2ee8SDavid du Colombier# let the spooler take care of moving it there 18219b2ee8SDavid du Colombier# this is necessary for clients and servers that share the 19219b2ee8SDavid du Colombier# same name space 20219b2ee8SDavid du Colombierif (! ~ $THIS_HOST $DEST_HOST || ! LOCK $LPSPOOL/$LPDEST/LOCK $sysname $pid) exit '' 213e12c5d1SDavid du Colombier 223e12c5d1SDavid du Colombiercd $LPSPOOL 233e12c5d1SDavid du Colombier 243e12c5d1SDavid du ColombierMAXTRY=2 25219b2ee8SDavid du ColombierPRINTLOG=$LPLOGDIR/$LPDEST^.st 263e12c5d1SDavid du Colombier 27219b2ee8SDavid du Colombierfn schedule{ 28219b2ee8SDavid du Colombier FILE=`{ 29219b2ee8SDavid du Colombier @{ 30219b2ee8SDavid du Colombier rfork n 31219b2ee8SDavid du Colombier bind -b $LPLIB/sched /bin 32219b2ee8SDavid du Colombier $SCHED $LPDEST 33219b2ee8SDavid du Colombier } 34219b2ee8SDavid du Colombier } 35219b2ee8SDavid du Colombier} 36219b2ee8SDavid du Colombier 37219b2ee8SDavid du Colombierwhile (schedule; ! ~ $#FILE 0) { 383e12c5d1SDavid du Colombier SCHEDLINE=`{cat $LPDEST/$FILE(1)^id} 393e12c5d1SDavid du Colombier LSLINE=`{ls -l $LPDEST/$FILE(1)} 40*9a747e4fSDavid du Colombier if (! test -s $LPDEST/.seqno) { 41*9a747e4fSDavid du Colombier echo 0 > $LPDEST/.seqno 42*9a747e4fSDavid du Colombier } 43*9a747e4fSDavid du Colombier if not { 44*9a747e4fSDavid du Colombier LPSEQNO = `{cat $LPDEST/.seqno | awk '{seqno = $1 + 1; if (seqno > 999) seqno = 0; print seqno}'} 45*9a747e4fSDavid du Colombier echo $LPSEQNO > $LPDEST/.seqno 46*9a747e4fSDavid du Colombier } 47219b2ee8SDavid du Colombier STARTIME=`{date} 48219b2ee8SDavid du Colombier if (! test -s $LPDEST/$FILE(1)) { 49219b2ee8SDavid du Colombier echo $SCHEDLINE(2)$SCHEDLINE(4)' '$SCHEDLINE(3) $SCHEDLINE(5)' ! '$LSLINE(6) $STARTIME(4) >> $LPLOG 50219b2ee8SDavid du Colombier rm -f $LPDEST/$FILE $LPDEST/$FILE^id 51219b2ee8SDavid du Colombier } 52219b2ee8SDavid du Colombier if not { 533e12c5d1SDavid du Colombier if (~ $THIS_HOST $DEST_HOST) { 543e12c5d1SDavid du Colombier if (test -f $LPLIB/perm/$LPDEST && grep -s $SCHEDLINE(2) $LPLIB/perm/$LPDEST) { 553e12c5d1SDavid du Colombier echo you are not allowed to use printer $LPDEST | mail $SCHEDLINE(2) 563e12c5d1SDavid du Colombier rm -f $LPDEST/$FILE(1) $LPDEST/$FILE(1)^id 573e12c5d1SDavid du Colombier } 583e12c5d1SDavid du Colombier if not { 593e12c5d1SDavid du Colombier > $PRINTLOG 603e12c5d1SDavid du Colombier STARTIME=`{date} 613e12c5d1SDavid du Colombier eval $LOCAL_CMD 623e12c5d1SDavid du Colombier rv=$status 633e12c5d1SDavid du Colombier ENDTIME=`{date} 64219b2ee8SDavid du Colombier status=$rv 65219b2ee8SDavid du Colombier if () { 663e12c5d1SDavid du Colombier echo $SCHEDLINE(1)^$SCHEDLINE(3)' '$SCHEDLINE(2)' '$SCHEDLINE(4)' + '$LSLINE(6)' '$STARTIME(4)' '$ENDTIME(4) 673e12c5d1SDavid du Colombier eval $SUCCESS_CMD 683e12c5d1SDavid du Colombier rm -f $LPDEST/$FILE(1) $LPDEST/$FILE(1)^id 693e12c5d1SDavid du Colombier } 703e12c5d1SDavid du Colombier if not { 71219b2ee8SDavid du Colombier echo $SCHEDLINE(1)^$SCHEDLINE(3)' '$SCHEDLINE(2)' '$SCHEDLINE(4)' - '$LSLINE(6)' '$STARTIME(4)' '$ENDTIME(4)' status='$rv 72219b2ee8SDavid du Colombier THISTRY=`{echo $SCHEDLINE(4) + 1|hoc} 733e12c5d1SDavid du Colombier echo $SCHEDLINE(1) $SCHEDLINE(2) $SCHEDLINE(3) $THISTRY >$LPDEST/$FILE(1)^id 743e12c5d1SDavid du Colombier if (test $THISTRY -ge $MAXTRY) { 753e12c5d1SDavid du Colombier if (test -d $LPLIB/prob/$LPDEST) { 763e12c5d1SDavid du Colombier cp $LPDEST/$FILE(1) $LPLIB/prob/$LPDEST 773e12c5d1SDavid du Colombier cp $LPDEST/$FILE(1)^id $LPLIB/prob/$LPDEST 783e12c5d1SDavid du Colombier cp $PRINTLOG $LPLIB/prob/$LPDEST/$FILE(1)^log 793e12c5d1SDavid du Colombier } 803e12c5d1SDavid du Colombier upasname=daemon 813e12c5d1SDavid du Colombier mail $SCHEDLINE(2) <<endmail1 823e12c5d1SDavid du Colombier rm -f $LPDEST/$FILE(1) $LPDEST/$FILE(1)^id 833e12c5d1SDavid du Colombier } 843e12c5d1SDavid du Colombier if not { 853e12c5d1SDavid du Colombier touch $LPDEST/$FILE(1) 863e12c5d1SDavid du Colombier sleep $LPDELAY 873e12c5d1SDavid du Colombier } 883e12c5d1SDavid du Colombier } 893e12c5d1SDavid du Colombier } 903e12c5d1SDavid du Colombier } 913e12c5d1SDavid du Colombier if not { 92219b2ee8SDavid du Colombier# we don't want to be here 933e12c5d1SDavid du Colombier# trap '' 13 # temp hack: ignore SIGPIPE 943e12c5d1SDavid du Colombier STARTIME=`{date} 953e12c5d1SDavid du Colombier eval $REMOTE_CMD 963e12c5d1SDavid du Colombier rv=$status 973e12c5d1SDavid du Colombier ENDTIME=`{date} 98219b2ee8SDavid du Colombier if (~ $rv '') { 993e12c5d1SDavid du Colombier echo $SCHEDLINE(1)^$SCHEDLINE(3)' '$SCHEDLINE(2)' '$SCHEDLINE(4)' + '$LSLINE(6)' '$STARTIME(4)' '$ENDTIME(4) 1003e12c5d1SDavid du Colombier rm -f $LPDEST/$FILE(1) $LPDEST/$FILE(1)^id 1013e12c5d1SDavid du Colombier } 1023e12c5d1SDavid du Colombier if not { 1033e12c5d1SDavid du Colombier echo $SCHEDLINE(1)^$SCHEDLINE(3)' '$SCHEDLINE(2)' '$SCHEDLINE(4)' - '$LSLINE(6)' '$STARTIME(4)' '$ENDTIME(4) 1043e12c5d1SDavid du Colombier echo status $rv from '$REMOTE_CMD' 1053e12c5d1SDavid du Colombier THISTRY=`{echo $SCHEDLINE(4) + 1|hoc} 1063e12c5d1SDavid du Colombier echo $SCHEDLINE(1) $SCHEDLINE(2) $SCHEDLINE(3) $THISTRY >$LPDEST/$FILE(1)^id 1073e12c5d1SDavid du Colombier if (~ $THISTRY $MAXTRY) { 1083e12c5d1SDavid du Colombier upasname=daemon 1093e12c5d1SDavid du Colombier mail $SCHEDLINE(2) <<endmail2 1103e12c5d1SDavid du Colombier } 1113e12c5d1SDavid du Colombier if not { 1123e12c5d1SDavid du Colombier touch $LPDEST/$FILE(1) 1133e12c5d1SDavid du Colombier sleep $LPDELAY 1143e12c5d1SDavid du Colombier 1153e12c5d1SDavid du Colombier # this is here to deal with running out of 1163e12c5d1SDavid du Colombier # Datakit channels or other stupid problems 1173e12c5d1SDavid du Colombier # backoff connection attempts but not too long 1183e12c5d1SDavid du Colombier LPDELAY=`{echo $LPDELAY '*' 2|hoc} 1193e12c5d1SDavid du Colombier if (test $LPDELAY -gt 960) 1203e12c5d1SDavid du Colombier LPDELAY=60 1213e12c5d1SDavid du Colombier } 1223e12c5d1SDavid du Colombier } 1233e12c5d1SDavid du Colombier } 1243e12c5d1SDavid du Colombier } 125219b2ee8SDavid du Colombier} 1263e12c5d1SDavid du ColombierYour job has failed to print on $LPDEST after $MAXTRY attempt(s). 1273e12c5d1SDavid du ColombierIf the directory $LPLIB/prob/$LPDEST exists on $DEST_HOST, 1283e12c5d1SDavid du Colombierthe file has been put there along with the printer log file. 1293e12c5d1SDavid du Colombier Your friendly printer daemon 1303e12c5d1SDavid du Colombierendmail1 1313e12c5d1SDavid du ColombierYour job has failed to print on $LPDEST after $MAXTRY attempt(s). 1323e12c5d1SDavid du ColombierThere is a problem in sending the job to $DEST_HOST, 1333e12c5d1SDavid du Colombierbut I'll keep trying. Have a nice day. 1343e12c5d1SDavid du Colombier Your enthusiastic printer daemon 1353e12c5d1SDavid du Colombierendmail2 1363e12c5d1SDavid du ColombierUNLOCK $LPSPOOL/$LPDEST 1373e12c5d1SDavid du Colombierrm $LPSPOOL/$LPDEST >[2]/dev/null 138