NEWSBASE=/var/spool/news NEWSOUTQ=out.going NEWSHOST=news.demon.co.uk ATTEMPTS=10 PROCNEWSPID=/etc/procnews.pid LOGFILE=/tmp/procnews$$ FAILFLAG=/etc/ppp/start.failed # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/var/lib/news/bin/config} rm -f $PROCNEWSPID echo $$ > $PROCNEWSPID # # Do news lock # lock="$NEWSCTL/LOCKinput" ltemp="$NEWSCTL/L.$$" echo $$>$ltemp trap "rm -f $ltemp; exit 0" 0 1 2 15 while true do if /usr/lib/newsbin/newslock $ltemp $lock then trap "rm -f $ltemp $lock; exit 0" 0 1 2 15 break; fi if test -f $lock then locker=`cat $lock` if test "`ps $locker`" != "" then echo "Breaking stale News lock on process $locker" rm -f $NEWSCTL/L* continue fi fi echo "Waiting for News lock on process $locker" sleep 30 done # # kill slurp after an hour ! # #/etc/slurpkiller 3600 & # # Check what's up # #/etc/check.news & # # Start retrieval of news from a newshost # # note: distort == pubnews # #NEWSHOSTS="news distort disturb disrupt " #NEWSHOSTS="news pubnews" NEWSHOSTS=`cat /var/lib/news/slurphosts | grep -v '^#'` DOW=`date +%a` NEWSGROUPS=`grep -v '^#' /var/lib/news/slurpgroups | grep $DOW | sed "s/$DOW//"` GIVEUPON= for newsgroup in $NEWSGROUPS do i=0 while [ $i -lt $ATTEMPTS ] do i=`expr $i + 1` # echo "`/bin/date` Procnews: slurp attempt $i" # # Now the servers are synchronised, can try each in turn with the same date file # for newshost in $NEWSHOSTS do if test "`echo $GIVEUPON | grep $newshost`" != "" then continue; fi cp /var/lib/news/slurp.demon.$newsgroup /var/lib/news/slurp.$newshost.$newsgroup /var/lib/news/slurp $newshost/$newsgroup slurpstat=$? if [ $slurpstat != 3 ] then echo "`/bin/date` Procnews: slurp ($newshost/$newsgroup) done on try $i, status: $slurpstat" >> $LOGFILE slurppid=`grep slurp /var/adm/messages | sed 's/^.*\[\([0-9]*\).*$/\1/' | tail -1` cp /var/lib/news/slurp.$newshost.$newsgroup /var/lib/news/slurp.demon.$newsgroup if test $slurpstat != 0 then GIVEUPON="$GIVEUPON $newshost" fi # Give the syslog time to update file before grabbing messages sleep 5 sync grep "slurp\[$slurppid\]" /var/adm/messages >> $LOGFILE break else echo "`date` Procnews: slurp ($newshost/$newsgroup) try $i exit status $slurpstat" >> $LOGFILE # Check for link failure pppdpid=`/etc/pidrunning pppd` if test "$pppdpid" = "" then echo "`date` Procnews: pppd dead on try $i, giving up" >> $LOGFILE i=$ATTEMPTS echo "NEWS+MAIL `date` procnews[$$]: line died" > $FAILFLAG fi fi done if [ $slurpstat = 0 ] then break fi done if [ $slurpstat != 0 ] then echo "`/bin/date` Procnews: slurp failed to connect to servers ($NEWSHOSTS) for $NEWSGROUPS groups after $ATTEMPTS tries" >> $LOGFILE fi done chown news.news /usr/spool/news/in.coming/* # Collect link stats echo >> $LOGFILE echo "Link statistics after slurp" >> $LOGFILE ifconfig >> $LOGFILE echo "Disk usage after slurp" >> $LOGFILE ls -l /usr/spool/news/in.coming/ >> $LOGFILE df /usr/spool/news/in.coming/ >> $LOGFILE #cp /usr/spool/news/in.coming/*.t /usr/spool/news/in.coming/tmp # # Clear locks # rm -f $ltemp $lock # Send someone the log if test -f $LOGFILE then mail -s "Procnews result" root < $LOGFILE rm -f $LOGFILE fi rm -f $PROCNEWSPID # End: /etc/procnews