chiark / gitweb /
rename sm_period_counter to until_flush
[inn-innduct.git] / backends / send-ihave.in
1 #! /bin/sh
2 # fixscript will replace this line with code to load innshellvars
3
4 ##  $Revision: 2674 $
5 ##  SH script to send IHAVE batches out.
6
7 PROGNAME=`basename $0`
8 LOG=${MOST_LOGS}/${PROGNAME}.log
9
10 ## How many Message-ID's per message.
11 PERMESSAGE=1000
12
13 ##  Go to where the action is, start logging
14 cd $BATCH
15 umask 002
16 DEBUG=""
17 if [ "X$1" = X-d ] ; then
18     DEBUG="-d"
19     shift
20 else
21     test ! -f ${LOG} && touch ${LOG}
22     chmod 0660 ${LOG}
23     exec >>${LOG} 2>&1
24 fi
25
26 echo "${PROGNAME}: [$$] begin `date`"
27
28 ##  List of sitename:hostname pairs to send to
29 if [ -n "$1" ] ; then
30     LIST="$*"
31 else
32     echo "${PROGNAME}: [$$] no sites specified" >&2
33     exit 1
34 fi
35
36 ##  Do the work...
37 for SITE in ${LIST}; do
38     case $SITE in
39     *:*)
40         HOST=`expr $SITE : '.*:\(.*\)'`
41         SITE=`expr $SITE : '\(.*\):.*'`
42         ;;
43     *)
44         HOST=$SITE
45         ;;
46     esac
47     BATCHFILE=${SITE}.ihave.batch
48     LOCK=${LOCKS}/LOCK.${SITE}.ihave
49     trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
50     shlock -p $$ -f ${LOCK} || {
51         echo "${PROGNAME}: [$$] ${SITE}.ihave locked by `cat ${LOCK}`"
52         continue
53     }
54
55     ##  See if any data is ready for host.
56     if [ -f ${SITE}.ihave.work ] ; then
57         cat ${SITE}.ihave.work >>${BATCHFILE}
58         rm -f ${SITE}.ihave.work
59     fi
60     if [ ! -f ${SITE}.ihave -o ! -s ${SITE}.ihave ] ; then
61         if [ ! -f ${BATCHFILE} -o ! -s ${BATCHFILE} ] ; then
62             rm -f ${LOCK}
63             continue
64         fi
65     fi
66     mv ${SITE}.ihave ${SITE}.ihave.work
67     ctlinnd -s -t30 flush ${SITE}.ihave || continue
68     cat ${SITE}.ihave.work >>${BATCHFILE}
69     rm -f ${SITE}.ihave.work
70     if [ ! -s ${BATCHFILE} ] ; then
71         echo "${PROGNAME}: [$$] no articles for ${SITE}.ihave"
72         rm -f ${BATCHFILE}
73         continue
74     fi
75
76     echo "${PROGNAME}: [$$] begin ${SITE}.ihave"
77
78     ##  Write out the batchfile as a control message, in clumps.
79     export SITE PERMESSAGE BATCHFILE
80     while test -s ${BATCHFILE} ; do
81         (
82             echo Newsgroups: to.${SITE}
83             echo Control: ihave `innconfval pathhost`
84             echo Subject: cmsg ihave `innconfval pathhost`
85             echo ''
86             ${SED} -e ${PERMESSAGE}q <${BATCHFILE}
87         ) | ${INEWS} -h
88         ${SED} -e "1,${PERMESSAGE}d" <${BATCHFILE} >${BATCHFILE}.tmp
89         mv ${BATCHFILE}.tmp ${BATCHFILE}
90     done
91     echo "${PROGNAME}: [$$] end ${SITE}.ihave"
92     rm -f ${LOCK}
93 done
94
95 echo "${PROGNAME}: [$$] end `date`"