Nästa Föregående Innehållsförteckning

6. Hur automatiserar jag anslutningsförfarandet?

Automatisk hantering av nyheter och e-post är ganska enkelt att implementera i Linux.

Först och främst skall man ha en fil /usr/lib/ppp/ppp-on som initierar ISP-anslutningen. Ofta så innehåller den filen följande:

/usr/sbin/pppd
Vidare specificering görs i filen /etc/ppp/options:
connect "/usr/lib/ppp/chat -v -f /etc/ppp/chatscript"
crtscts
modem
defaultroute
asyncmap 00000000
user dirk
/dev/modem 38400

För att avsluta en anslutning, använd den tillgängliga versionen av /usr/lib/ppp/ppp-off.

Efter att ha testat funktionaliteten hos dessa båda script så måste man skriva script som utför de olika uppgifterna. Scriptet för att hämta e-post har beskrivits tidigare, och vi kommer att anta att det finns i /home/dirk/pop.

Ett script för utbyte av e-post kan sedan göras i /root/mail:

#! /bin/sh
#
# exchange mail
# 10 minutes timeout:
TIMEOUT=600
DT=10

# kick sendmail:
sendmail -q &

# retrieve mail:
su dirk -c /home/dirk/pop

# wait for sendmail to terminate:
t=0
while ! mailq | grep -q "Mail queue is empty"; do
    t=$[$t+$DT]
    if [ $t -gt $TIMEOUT ] ; then
     echo "sendmail -q timeout ($TIMEOUT).."
     exit 1
    fi
    sleep $DT
done

exit 0

Scriptet för utbyte av nyheter kan placeras i /usr/lib/news/news:

#!/bin/sh
#
# exchange news
# must be run as news:
cd /usr/lib/news

#update the outgoing batch (C News):
/usr/lib/newsbin/input/newsrun < /dev/null

#exchange news:
/usr/lib/newsbin/newsx acme news.acme.xz

#and flush the incoming batch:
/usr/lib/newsbin/input/newsrun < /dev/null
Ett script för att koppla samman de olika delarna återstår och kan placeras i /root/news+mail:
#!/bin/sh
#
# exchange news and email
# must be run as root
#
if ! /usr/lib/ppp/ppp-on; then
    exit 1
fi
trap "/usr/lib/ppp/ppp-off" 1 2 3 15

#exchange news+mail:
/root/mail &
su news -c ~news/news
wait

#disconnect..
/usr/lib/ppp/ppp-off

#update the incoming batch (C News):
su news -c /usr/lib/newsbin/input/newsrun < /dev/null &

exit 0

Det är ganska lätt att utöka ovanstående till att endast öppna en anslutning ifall det finns någon e-post eller nyheter att skicka. Låt oss kalla det för /root/news+mail.cond, och kom ihåg att namnet på den utgående nyhets-spoolen måste vara den man använder:

#!/bin/sh
#
# exchange news and email, only if outgoing news or mail
# (C News spool)
if [ -s /var/spool/news/out.going/acme/togo ] ||
    ! ( mailq | grep -q "Mail queue is empty"); then
     /root/news+mail
fi

Det enda som återstår är att specificera när allt skall hända. Detta görs genom att använda kommandot crontab -e som root. Låt oss anta att vi alltid vill skicka och ta emot nyheter och e-post klockan 07:00 på morgonen, och efter det var fjärde timme givet att det finns utgående meddelanden:

00 7            * * *   /root/news+mail
00 11,15,19,23  * * *   /root/news+mail.cond
Se till att varje komponent testas och fungerar innan du sätter ihop dem. Man kan senare lägga till flera andra uppgifter, såsom att justera tiden (genom att använda ntpdate), och automatiskt uppdatera (spegla) lokalt underhållna WWW och FTP filer till ISPn (genom att använda make och ftp).

ALT: Beroende på vad man är ute efter, så är det även möjligt att vända på hela proceduren. Varje gång en PPP-länk initieras så startas scriptet /etc/ppp/ip-up. Här kan man lägga in den magi som krävs för att skicka och ta emot nyheter och e-post. Se man pppd för mer information.

ALT: Det är också möjligt att automatiskt ansluta PPP när nätverkstrafik detekteras. Detta är på många sätt den elegantare lösningen, men den är beroende av en bra konfiguration för att undvika att frekventa (och dyra) anslutningar görs. Mer information hittar du på:

http://www.dna.lth.se/~erics/diald.html

Programmet diald finns på:

ftp://sunsite.unc.edu/pub/Linux/system/network/serial/diald-0.16.tar.gz

På samma ställe hittar man också andra variationer på temat PPP-anslutningar.


Nästa Föregående Innehållsförteckning