chiark / gitweb /
WIP tidy up, etc, rename old_input_file to flushing_input_file
[innduct.git] / backends / send-nntp.in
1 #! /bin/sh
2 # fixscript will replace this line with code to load innshellvars
3
4 ##  $Revision: 4115 $
5 ##  SH script to send NNTP news out.
6
7 PROGNAME=`basename $0`
8 LOG=${MOST_LOGS}/${PROGNAME}.log
9
10 ##  Go to where the action is, start logging
11 cd $BATCH
12 umask 002
13 DEBUG=""
14 if [ "X$1" = X-d ] ; then
15     DEBUG="-d"
16     shift
17 else
18     test ! -f ${LOG} && touch ${LOG}
19     chmod 0660 ${LOG}
20     exec >>${LOG} 2>&1
21 fi
22
23 echo "${PROGNAME}: [$$] begin `date`"
24
25 ##  List of sitename:hostname pairs to send to
26 if [ -n "$1" ] ; then
27     LIST="$*"
28 else
29     echo "${PROGNAME}: [$$] no sites specified" >&2
30     exit 1
31 fi
32
33 ##  Do the work...
34 for SITE in ${LIST}; do
35     case $SITE in
36     *:*)
37         HOST=`expr $SITE : '.*:\(.*\)'`
38         SITE=`expr $SITE : '\(.*\):.*'`
39         ;;
40     *)
41         HOST=$SITE
42         ;;
43     esac
44     case $HOST in
45     *@*)
46         PORT=`expr $HOST : '\(.*\)@.*'` 
47         HOST=`expr $HOST : '.*@\(.*\)'`
48         ;;
49     *)  
50         PORT=119
51         ;;
52     esac
53     BATCHFILE=${SITE}.nntp
54     LOCK=${LOCKS}/LOCK.${SITE}
55     trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
56     shlock -p $$ -f ${LOCK} || {
57         echo "${PROGNAME}: [$$] ${SITE} locked by `cat ${LOCK}`"
58         continue
59     }
60
61     ##  See if any data is ready for host.
62     if [ -f ${SITE}.work ] ; then
63         cat ${SITE}.work >>${BATCHFILE}
64         rm -f ${SITE}.work
65     fi
66     if [ ! -f ${SITE} -o ! -s ${SITE} ] ; then
67         if [ ! -f ${BATCHFILE} -o ! -s ${BATCHFILE} ] ; then
68             rm -f ${LOCK}
69             continue
70         fi
71     fi
72     mv ${SITE} ${SITE}.work
73     ctlinnd -s -t30 flush ${SITE} || continue
74     cat ${SITE}.work >>${BATCHFILE}
75     rm -f ${SITE}.work
76     if [ ! -s ${BATCHFILE} ] ; then
77         echo "${PROGNAME}: [$$] no articles for ${SITE}"
78         rm -f ${BATCHFILE}
79         continue
80     fi
81
82     echo "${PROGNAME}: [$$] begin ${SITE}"
83     time innxmit ${DEBUG} -P ${PORT} ${HOST} ${BATCH}/${BATCHFILE}
84     echo "${PROGNAME}: [$$] end ${SITE}"
85     rm -f ${LOCK}
86 done
87
88 echo "${PROGNAME}: [$$] end   `date`"