BASH Programming - Введение


Скачивание почты и распаковка


Для дозвонки до линков я использую скрипт /etc/ifmail/misc/contrib/ifpoll, в который внес несколько маленьких изменений. Этот скрипт я вызываю каждую ночь из crontab пользователя fnet для прозвонки к моему хабу.

#!/bin/sh # ver 0.7 # ifpoll, скачать почту с узла моего босса или узла, заданного в командной # строке первым аргументом # # Я запускаю этот скрипт каждый день через crond, но вы можете запускать его # ручками :) Запускайте его от имени владельца ifcico # rasca, berlin 1993 (Rasca Gmelch, 2:2410/305.4) #

# где находятся "ifcico" и "ifpack" FIDOPATH=/usr/lib/ifmail

# журнал ifcico IFLOG=/var/log/messages

# владелец "ifcico" IFCICO_OWNER=fnet

# sysop of fido stuff IFCICO_SYSOP=postmaster

# адрес моего босса (адрес по умолчанию) NODE="f33.n125.z1.fidonet.org"

# число попыток дозвона до NODE MaxTry=2

# задержка между исходящими звонками DELAY=10

# куда выдавать содержимое журнала - файл или tty/console INFO_TTY=/dev/tty1

echo "`date \"+%b %d %T\"` ifpoll[$$]: starting"

# напомнит мне, что не надо запускать от root.. # if [ `whoami` != "$IFCICO_OWNER" ]; then echo "*** run $0 as the owner of ifcico ***" echo "`date \"+%b %d %T\"` ifpoll[$$]: wrong uid (rc 2)" exit 2 fi

# argv[1] - возможный узел для звонка # if [ "$1" != "" ]; then if [ "$1" = "-?" ] [ "$1" = "-h" ]; then echo "usage: ifpoll [<node>]" exit 3 else NODE=$1 fi fi

# давайте запакуем пакеты ... # $FIDOPATH/ifpack -f

# повторять пока ifcico не соединиться или MaxTry не достигнет указанной # величины i=1; errlv=1 while let 'i <= MaxTry' && let 'errlv != 0' do echo -n "`date \"+%b %d %T\"` ifpoll[$$]: $i. try ($NODE) " # # запуск ifcico в режиме мастера .. # chmod 664 /dev/ttyS1 $FIDOPATH/ifcico -r1 $NODE errlv=$? if [ $errlv != "0" ]; then echo "failed :( " if [ $i != $MaxTry ]; then sleep $DELAY fi let i=i+1 else echo "ok :)" fi done


# если прозвонились, то распаковываем.. # if [ $errlv = "0" ]; then echo "`date \"+%b %d %T\"` ifpoll[$$]: unpacking.. " $FIDOPATH/ifunpack # добавьте здесь несколько строк для обработки tic-файлов или # пришедших файллистов или еще чего-нибудь.. else # отправить мне почту о неудачном звонке echo "`date \"+%b %d %T\"` ifpoll[$$]: Failed :(" echo "`date \"+%b %d %T\"` ifpoll[$$]: Sending message :(" # Я изменил это, поскольку mailx - стандарт для большинства систем tail --lines=20 $IFLOG | mailx -s "ifpoll: failed" $IFCICO_SYSOP > /dev/null fi

echo "`date \"+%b %d %T\"` ifpoll[$$]: finished (rc $errlv)"

# вернуть код ошибки ifcico exit $errlv

Если запустить этот скрипт без параметров, он автоматически начнет звонить моему аплинку, или вы можете указать параметром узел, на который хотите позвонить (в pfnz-формате, например, ifpoll f26.n9996.z96). Он вначале запакует весь netmail/echomail и позвонит на узел. Затем, после успешного соединения, попытается распаковать прибывшие пакеты. При возникновении сложностей с прозвоном пользователь fnet отправит 20 строк в файл /var/log/syslog, так что вы можете определить причину проблемы (напр., сигнал BUSY, отсутствие ответа, и т.д.). Конечно, скрипт надо отредактировать в соответствии с вашей системой.

Для распаковки пришедшей почты я запускаю вот этот скрипт, называемый ifmailcheck в crontab как пользователь fnet. Он ищет в /var/spool/ifmail/inb ftn эхопакеты и, если они есть, вызывает ifunpack.

#!/bin/sh # ifmailcheck, I call this script every hour # if (test -r /var/spool/ifmail/inbound/*.pkt) then /usr/lib/ifmail/ifunpack fi


Содержание раздела