tneff@bfmny0.UUCP (Tom Neff) (05/09/89)
I used to put a lot of individual expires into the root crontab, which meant every time I wanted to adjust things I had to mess with cron. I wasn't satisfied with the logging of this either. So I wrote a general purpose cleanup shell script where I can specify all the individual expires, trims, logging etc for news. Perhaps others may find it useful. I call it "cleannews": ---cut here------cut here------cut here------cut here------cut here--- #! /bin/sh # '@(#)cleannews 1.2 05/03/89' # Perform news cleanup. This script should be run nightly from the # root crontab. The distributed version performs a general news expire # and trims the log files. You can add newsgroup-specific expires and # any other news related stuff you want to run nightly. Keeping # everything together in one shell script lets you manage netnews # flexibly without changing 'crontab' all the time. Cleannews also # writes a logfile (including error codes). This logfile is not # itself cleaned automatically but it should only grow by a few # lines per night. To turn it off, set Logfile=/dev/null. # # This version was tested with the news 2.11 software but should # work most anywhere. # set -vx # uncomment for debugging # Customize these values (if necessary) for your site. Date=/bin/date Expire=/usr/lib/news/expire Trimlib=/usr/lib/news/trimlib Logfile=/usr/lib/news/cleannews.log # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Add copies of the following block for any specific # expires you want to run besides the general expire. # # Customize the following values for each expire: KEEPNEWS=14 KEEPHIST=30 VERBOSE=0 OUTPUT="> /dev/null" GROUPS=all if $Expire -e $KEEPNEWS -E $KEEPHIST -v $VERBOSE -n $GROUPS $OUTPUT then RC=; else RC="?? exit code $? ??" ; fi $Date "+%D %T expire $GROUPS $RC" >> $Logfile # End of expire block # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # This is the news logfile trimmer from the news 2.11 'misc' directory if $Trimlib then RC=; else RC="?? exit code $? ??" ; fi $Date "+%D %T trimlib $RC" >> $Logfile ---cut here------cut here------cut here------cut here------cut here--- -- Tom Neff UUCP: ...!uunet!bfmny0!tneff "Truisms aren't everything." Internet: tneff@bfmny0.UU.NET
usenet@statware.UUCP (Usenet News) (05/10/89)
The following script is what I use to put all my expires in one place. It is not as simple as "cleanup", but is more flexible for those sites which may need it. I wanted to expire newsgroups at different rates, and this permits me to do that. I run it every night, and have the advantage of making all expire changes in one file. Note that I rebuild the history file (-r) once a month, by testing if the date is the 15th. You will have to adjust the list of newsgroups and other settable parameters before you start using this script. #!/bin/sh # @(#) daily.SH Usenet daily script Version 1.1 September 1988 # # Do the report using report.awk, run expire, and run sendbatch. # That this script starts several processes running in the background. # # By Mathieu Federspiel, {hp-pcd,tektronix}!orstcs!statware!mcf # Version 1.0: July 1988 # Customize Parameters # Some systems do not use directory structure for spool directory, # and need to comment out "find ... -type d ...". # The options used on the TMAIL command may need to be changed. # File "news/misc/report.awk" is used, and the mail header stuff needs to # be commented out. Move and edit this file, set REPORT to working version. NEWSUSR=usenet NEWSGRP=news DESTDIR=/usr/news LIBDIR=/lib SPOOLDIR=/spool TMAIL=/usr/bin/mailx REPORT=/usr/news/lib/report.awk # see expire(8) when setting these EXPIREOPTS="-e 13 -i -v2" EXPIREGRPS="-n all,!control,!cor,!cs,!junk,!or,!orst,!pnw,!rec,!soc,!talk,!texhax,!comp.sources.unix,!comp.sources.wanted,!comp.doc,!news.admin,!news.groups" # you may want to expire some groups after *short* time EXPIREOPTS2="-e 6 -i -v2" EXPIREGRPS2="-n control,cor,cs,junk,or,orst,pnw,rec,soc,comp.sources.wanted,news.admin,news.groups" # you may want to expire some groups after *long* time EXPIREOPTS3="-e 350 -i -v2" EXPIREGRPS3="-n comp.doc,comp.sources.unix,texhax" # see sendbatch(8) when setting these SENDBATCHOPTS="-c -b16" TOSYSTEM="orstcs" # Go to directory with log files cd ${DESTDIR}${LIBDIR} # The list in the for controls how many old files are retained for i in 5 4 3 2 1 0 do j=`expr $i + 1` mv log.$i log.$j mv errlog.$i errlog.$j done mv log log.0 mv errlog errlog.0 # this may be "cp /dev/null log" > log > errlog # If run by NEWSUSER, chown and chgrp not required #chown ${NEWSUSR} log errlog ; chgrp ${NEWSGRP} log errlog # Start reports (awk -f $REPORT log.0 | ${TMAIL} -n -s "Usenet Report from log.0" ${NEWSUSR})& #(cat errlog.0 | ${TMAIL} -n -s "Usenet Errfile from errlog.0" ${NEWSUSR})& # Remove expired articles. Once a month, rebuild history file and # do the expiration. Refer to expire(8). if [ 15 -eq `date +%d` ] then # -p, expire old articles by date of posting, gets rid of # articles with long expiration dates. use if -i not used. # -r, rebuild history file. # find, get rid of bad files, eg from disk problems ( { date ; df /usr/news echo "Standard Expire:\n" ${DESTDIR}${LIBDIR}/expire $EXPIREOPTS $EXPIREGRPS echo "\n\nShort Expire:\n\n" ${DESTDIR}${LIBDIR}/expire $EXPIREOPTS2 $EXPIREGRPS2 echo "\n\nLong Expire:\n\n" ${DESTDIR}${LIBDIR}/expire $EXPIREOPTS3 $EXPIREGRPS3 echo "\n\nRemove empty files:\n" # Find works to remove empty regular files. # Rmdir with find/sed removes empty directories. # Find does ls on directories under SPOOLDIR, using "SPOOLDIR/*" so # SPOOLDIR/.rnews is not removed. # Ls must report as follows for editing by sed: # ls spool/comp # total NN ... # where NN is the size of the contents; anything may follow. # Sed passes only directories with "total 0" to rmdir. # Rmdir is used as it will remove only empty directories. find ${DESTDIR}${SPOOLDIR} -size 0 -type f -exec rm {} \; rmdir `find ${DESTDIR}${SPOOLDIR}/* -type d -depth -print -exec ls -s {} \; |\ sed -e " 1{ h N } /total 0/{ x n } h d "` echo "\n\nRebuild history file:\n" ${DESTDIR}${LIBDIR}/expire -r -v2 date ; df /usr/news } | ${TMAIL} -n -s "Usenet Expire, and history rebuild" ${NEWSUSR})& else ( { date ; df /usr/news echo "Standard Expire:\n" ${DESTDIR}${LIBDIR}/expire $EXPIREOPTS $EXPIREGRPS echo "\n\nShort Expire:\n" ${DESTDIR}${LIBDIR}/expire $EXPIREOPTS2 $EXPIREGRPS2 date ; df /usr/news } | ${TMAIL} -n -s "Usenet Expire" ${NEWSUSR})& fi # Process articles being sent from here (${DESTDIR}${LIBDIR}/sendbatch ${SENDBATCHOPTS} ${TOSYSTEM})& # That's all, Folks! exit 0 -- Mathieu Federspiel mcf%statware.uucp@cs.orst.edu Statware {hp-pcd,tektronix}!orstcs!statware!mcf 260 SW Madison Avenue, Suite 109 503-753-5382 Corvallis OR 97333 USA