⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nntpsend

📁 早期freebsd实现
💻
字号:
#! /bin/sh##  $Revision: 1.8 $##  Send news via NNTP by running several innxmit processes in the background.##  Usage:##	nntpsend [-p][-r][-s size][-S][-t timeout][-T limit][host fqdn]...##	-p		Run innxmit with -p to prune batch files##	-r		innxmit, don't requeue on unexpected error code##	-s size		limit the .nntp file to size bytes##	-S		send via xreplic protocol (send to a slave site)##	-t timeout	innxmit timeout to make connection (def: 180)##	-T limit	innxmit connection transmit time limit (def: forever)##	host fqdn	send to host and qualified domain (def: nntpsend.ctl)##  If no "host fqdn" pairs appear on the command line, then ${CTLFILE}##  file is read.##  =()<. @<_PATH_SHELLVARS>@>()=. /var/spool/news/data/innshellvarsPROGNAME=`basename $0`LOCK=${LOCKS}/LOCK.${PROGNAME}CTLFILE=${NEWSLIB}/${PROGNAME}.ctlLOG=${MOST_LOGS}/${PROGNAME}.log##  Set defaults.D_FLAG=P_FLAG=R_FLAG=S_FLAG=TRUNC_SIZE=T_FLAG=TIMELIMIT=##  Parse JCL.MORETODO=truewhile ${MORETODO} ; do    case X"$1" in    X-d)	D_FLAG="-d"	;;    X-p)	P_FLAG="-p"	;;    X-r)	R_FLAG="-r"	;;    X-S)	S_FLAG="-S"	;;    X-s)	if [ -z "$2" ] ; then	    echo "${PROGNAME}: option requires an argument -- s" 1>&2	    exit 1	fi	TRUNC_SIZE="$2"	shift	;;    X-s*)	TRUNC_SIZE="`echo $2 | ${SED} -e 's/-s//'`"	;;    X-t)	if [ -z "$2" ] ; then	    echo "${PROGNAME}: option requires an argument -- t" 1>&2	    exit 1	fi	T_FLAG="-t$2"	shift	;;    X-t*)	T_FLAG="$1"	;;    X-T)	if [ -z "$2" ] ; then	    echo "${PROGNAME}: option requires an argument -- T" 1>&2	    exit 1	fi	TIMELIMIT="-T$2"	shift	;;    X-T*)	TIMELIMIT="$1"	;;    X--)	shift	MORETODO=false	;;    X-*)	echo "${PROGNAME}: illegal option -- $1" 1>&2	exit 1	;;    *)	MORETODO=false	;;    esac    ${MORETODO} && shiftdone##  Parse arguments; host/fqdn pairs.INPUT=${TMPDIR}/nntpsend$$cp /dev/null ${INPUT}while [ $# -gt 0 ]; do    if [ $# -lt 2 ]; then	echo "${PROGNAME}:  Bad host/fqdn pair" 1>&2	exit 1    fi    echo "$1 $2" >>${INPUT}    shift    shiftdone##  If nothing specified on the command line, read the control file.if [ ! -s ${INPUT} ] ; then    if [ ! -r ${CTLFILE} ]; then	echo "${PROGNAME}: cannot read ${CTLFILE}"	exit 1    fi    ${SED} -e 's/#.*//' -e '/^$/d' -e 's/::\([^:]*\)$/:max:\1/' \	-e 's/:/ /g' <${CTLFILE} >${INPUT}fi##  Go to where the action is.if [ ! -d ${BATCH} ]; then    echo "${PROGNAME}: directory ${BATCH} not found" 1>&2    exit 1ficd ${BATCH}##  Set up log file.umask 002if [ -z "${D_FLAG}" ]; then    test ! -f ${LOG} && touch ${LOG}    chmod 0660 ${LOG}    exec >>${LOG} 2>&1fiPPID=$$echo "${PROGNAME}: [${PPID}] start"##  Set up environment.export BATCH PROGNAME PPID INNFLAGS##  Loop over all sites.cat ${INPUT} | while read SITE HOST MAXSIZE FLAGS; do    ## Parse the input parameters.    if [ -z "${SITE}" -o -z "${HOST}" ] ; then	echo "Ignoring bad line: ${SITE} ${HOST} ${MAXSIZE} ${FLAGS}" 1>&2	continue    fi    test "${MAXSIZE}" = "max" && MAXSIZE=    ## Compute the specific parameters for this site.    if [ -n "${TRUNC_SIZE}" ]; then	SIZE="${TRUNC_SIZE}"    else	SIZE="${MAXSIZE}"    fi    D_PARAM=    R_PARAM=    S_PARAM=    TIMEOUT_PARAM=    TIMELIMIT_PARAM=    if [ -z "${FLAGS}" ]; then	MORETODO=false    else	MORETODO=true	set - ${FLAGS}    fi    while ${MORETODO} ; do	case "X$1" in	X-a)	    ;;	X-d)	    D_PARAM="-d"	    ;;	X-p)	    P_PARAM="-p"	    ;;	X-r)	    R_PARAM="-r"	    ;;	X-S)	    S_PARAM="-S"	    ;;	X-t)	    if [ -z "$2" ] ; then		echo "${PROGNAME}: option requires an argument -- t" 1>&2		exit 1	    fi	    TIMEOUT_PARAM="-t$2"	    shift	    ;;	X-t*)	    TIMEOUT_PARAM="$1"	    ;;	X-T)	    if [ -z "$2" ] ; then		echo "${PROGNAME}: option requires an argument -- T" 1>&2		exit 1	    fi	    TIMELIMIT_PARAM="-T$2"	    shift	    ;;	X-T*)	    TIMELIMIT_PARAM="$1"	    ;;	*)	    MORETODO=false	    ;;	esac	${MORETODO} && shift    done    INNFLAGS="-a"    if [ -n "${D_FLAG}" ]; then	INNFLAGS="${INNFLAGS} ${D_FLAG}"    else	test -n "${D_PARAM}" && INNFLAGS="${INNFLAGS} ${D_PARAM}"    fi    if [ -n "${P_FLAG}" ]; then	INNFLAGS="${INNFLAGS} ${P_FLAG}"    else	test -n "${P_PARAM}" && INNFLAGS="${INNFLAGS} ${P_PARAM}"    fi    if [ -n "${R_FLAG}" ]; then	INNFLAGS="${INNFLAGS} ${R_FLAG}"    else	test -n "${R_PARAM}" && INNFLAGS="${INNFLAGS} ${R_PARAM}"    fi    if [ -n "${S_FLAG}" ]; then	INNFLAGS="${INNFLAGS} ${S_FLAG}"    else	test -n "${S_PARAM}" && INNFLAGS="${INNFLAGS} ${S_PARAM}"    fi    if [ -n "${T_FLAG}" ]; then	INNFLAGS="${INNFLAGS} ${T_FLAG}"    else	test -n "${TIMEOUT_PARAM}" && INNFLAGS="${INNFLAGS} ${TIMEOUT_PARAM}"    fi    if [ -n "${TIMELIMIT}" ]; then	INNFLAGS="${INNFLAGS} ${TIMELIMIT}"    else	test -n "${TIMELIMIT_PARAM}" \	    && INNFLAGS="${INNFLAGS} ${TIMELIMIT_PARAM}"    fi    ##  Start sending this site in the background.    export SITE HOST LOCKS BATCHFILE PROGNAME PPID SIZE TMPDIR    sh -c '	BATCHFILE=${HOST}.nntp	LOCK=${LOCKS}/LOCK.${HOST}	trap "rm -f ${LOCK} ; exit 1" 1 2 3 15	shlock -p $$ -f ${LOCK} || {	    WHY="`cat ${LOCK}`"	    echo "${PROGNAME}: [${PPID}:$$] ${HOST} locked ${WHY} `date`"	    exit	}	if [ -f ${SITE}.work ] ; then	    cat ${SITE}.work >>${BATCHFILE}	    rm -f ${SITE}.work	fi	mv ${SITE} ${SITE}.work	if ctlinnd -s -t30 flush ${SITE} ; then	    cat ${SITE}.work >>${BATCHFILE}	    rm -f ${SITE}.work	    test -n "${SIZE}" && shrinkfile -s${SIZE} -v ${BATCHFILE}	    if [ -s ${BATCHFILE} ] ; then		echo "${PROGNAME}: [${PPID}:$$] begin ${HOST} `date`"		echo "${PROGNAME}: [${PPID}:$$] innxmit ${INNFLAGS} ${HOST} ..."		eval innxmit ${INNFLAGS} ${HOST} ${BATCH}/${BATCHFILE}		echo "${PROGNAME}: [${PPID}:$$] end ${HOST} `date`"	    else		rm -f ${BATCHFILE}	    fi	fi	rm -f ${LOCK}    ' &    sleep 5donewaitrm -f ${INPUT}echo "${PROGNAME}: [${PPID}] stop"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -