在 Linux 中,自动化处理新闻和电子邮件非常容易实现。
首先,应该创建一个/usr/lib/ppp/ppp-on 文件,用于启动 ISP 连接。通常,此文件将只包含以下内容
/usr/sbin/pppd
更详细的配置将在/etc/ppp/options 中进行。
connect "/usr/lib/ppp/chat -v -f /etc/ppp/chatscript"
crtscts
modem
defaultroute
asyncmap 00000000
user dirk
/dev/modem 38400
要结束连接,请使用提供的/usr/lib/ppp/ppp-off 版本。
在测试完这两个脚本的功能后,接下来必须编写执行各种任务的脚本。收集电子邮件的脚本之前已经描述过,这里我们假设它位于 /home/dirk/pop。
然后可以在 /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
用于交换新闻的脚本可以放在 /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
连接各个部分的脚本仍然需要,并且可以放在 /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
很容易对上述内容进行扩展,使其仅在存在待发送的电子邮件和新闻时才建立连接。我们称之为/root/news+mail.cond,并请记住,必须更新外发新闻假脱机文件的名称以适应实际情况。
#!/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
剩下唯一的事情是指定何时发生这一切。这可以使用命令 crontab -e
以 root 用户身份完成。假设我们总是希望在早上 07:00 交换新闻和邮件,之后每 4 小时交换一次,前提是有待发送的电子邮件和新闻。
00 7 * * * /root/news+mail
00 11,15,19,23 * * * /root/news+mail.cond
在将所有组件连接在一起之前,请确保每个组件都经过充分测试。之后可以添加其他几个任务,例如调整时间(使用ntpdate),以及将本地维护的 WWW 和 FTP 文件自动更新(镜像)到 ISP(使用 make 和 ftp)。备选方案: 根据个人偏好,也可以颠倒这个过程。每次 PPP 链接启动时,脚本/etc/ppp/ip-up 将会被启动。在这里可以添加启动电子邮件和新闻交换所需的任何“魔法”。有关更多详细信息,请参阅 man pppd
。
备选方案: 也可以在检测到网络流量时自动连接 PPP。这在许多方面是更优雅的解决方案,但这非常依赖于良好的配置,以避免频繁(且昂贵)的连接。更多信息可以在以下网址找到:
http://www.dna.lth.se/~erics/diald.html
diald
实用程序可从以下位置获取:
ftp://sunsite.unc.edu/pub/Linux/system/network/serial/diald-0.16.tar.gz
在同一位置也可以找到关于 PPP 连接主题的其他变体。