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.