uuxqt. The Mother of Invention. Fixed, at last.
Alexis Rosen
alexis at panix.uucp
Mon Oct 1 05:52:38 AEST 1990
(Like the saying goes, it sure was a mother...)
I and several others have in recent weeks complained about uuxqt's habit
of quitting in the middle of a large job. This was annoying, but I thought
I'd solved it by running it from cron every half hour. This is *DEFINITELY*
not the answer though- it will still toast your files fairly frequently. Of
course, I didn't find this out until Cnews had the grace to tell me there
was a problem.
Since Apple obviously can't write a working uucp (excepting Ron, who's not
distributing it), I decided to hack up a shell script that would deal with
both these problems. It does not need to be set{g/u}id to anything, and as
far as I can tell it works beautifully. However, I make *no gaurantees*. A
month ago I'd never written a real shell script... I guess I have at least
one thing to thank A/UX for - aside from those sleepless nights, I mean :-/
The strategy is simple. uuxqt never dies quickly- it must go through (it
seems, from watching many runs) at least 15 or 18 X files before it has a
chance to die. So I never give it a chance to die. I simply hide the X
files, and show them 10 at a time. I'm not sure but I think this may actually
speed up uuxqt if there's a lot of files in the spool (like, more than 300).
I also do some locking that is, as far as I can tell, 100% safe.
If anyone discovers any bugs, please mail to me as well as posting. After
all, if it is broken (unlikely though I think that to be), my news won't
be all that reliable...
Enjoy.
---
Alexis Rosen
very tired SYSOP/Owner
PANIX Public Access Unix Systems of NY
cmcl2!panix!alexis or alexis at panix.uucp
---------------------------->% cut here %<--------------------------------
#!/bin/sh
# uuxqt.wrap - V1.0 written by Alexis Rosen 9-30-90
# This bourne shell script is a wrapper for uuxqt which will prevent it from
# crapping out in the middle of a long run, almost certainly losing a file
# in the process. Rename the original uuxqt to uuxqt.real and change this
# file's name to uuxqt. This should be ownned/group by uucp, mode 770.
# It's too bad the guy who "fixed" uuxqt can't program to save his soul. I
# am absolutely disgusted with this. I just hope they get it right in 2.0.1!
cd /usr/spool/uucp
if [ ! -f X.* ] ; then exit 0 ; fi # nothing to do
HIDEDIR=/usr/spool/uucp/hidden-x-files # stick excess X files here
cd /usr/spool/uucp
if [ ! -d $HIDEDIR ] ; then mkdir $HIDEDIR ; chmod 770 $HIDEDIR ; fi
# check for a LCK.WXQT file. If it exists, see if it's stale or not.
# There is a very small window of time in which this locking system could
# fail. So wait ten seconds (probably way conservative) and inspect the lock.
if [ -f LCK.WXQT ] ; then
kill -0 `cat LCK.WXQT` 2>/dev/null
if [ $? != 0 ] ; then # stale lock
rm -f LCK.WXQT
else
exit 0
fi
fi
trap 'rm -f LCK.WXQT /tmp/xw$$' 0 1 2 15
echo "$$" >LCK.WXQT # make the lock
# Check the lock to make sure we kept it. If not let the other guy do the work.
sleep 10
if [ $$ != `cat LCK.WXQT` ] ; then trap 0 1 2 15 ; exit 0 ; fi
# Now move all the X. files into the hidden directory and then move 10 back
# out. When there aren't many X. files this won't matter but when there are
# hundreds, it's much more efficient than moving all but 10. Put the mv inside
# the loop to pick up any new X. files that might have just arrived.
while : ; do
mv -f X.* $HIDEDIR 2>/dev/null # all X. files into the hole
ls $HIDEDIR >/tmp/xw$$ # make a list
for i in `head /tmp/xw$$` ; do # pull out first ten
mv $HIDEDIR/$i $i
done
if [ ! -f X.* ] ; then exit 0 ; fi # normal exit here
/usr/lib/uucp/uuxqt.real $* # fire up the real uuxqt
XEXIT=$?
if [ $XEXIT != 0 ] ; then exit $XEXIT ; fi
done
More information about the Comp.unix.aux
mailing list