Linux共享上网定时开关的实现

数码时尚

  笔者公司的上网方式为:20多台电脑,10M共享型以太网;在电信申请ADSL接入,接入方式是虚拟拨号(IP是动态的),收费标准是每月200元,共180小时;采用Redhat Linux专业版作代理服务器实现ADSL共享上网。因为公司规模小、管理简单,所以没设专职网管。

  为了控制好费用,把每月的上网时长限定在180小时以内,限定的允许上网时间是:周一到周五,每天9:00~17:00。这样才能保证月累计网时保持在180小时。

  最初的方法是在代理服务器上把ADSL拨号命令加到系统启动文件内,开机就自动上网,每天定时开通公司的代理服务器。后来随着内部用户需求的增加,又要由同一台服务器提供内部局域网内的FTP、WWW等服务。考虑使用Linux系统提供的功能,实现ADSL共享上网的定时开通。在服务器上须实现的目标为:WWW、DHCP、FTP等服务每日24小时开通;ADSL共享上网服务每周一到周五,每天早上9:00定时开通,下午17:00定时关闭。由于没配备UPS,还须考虑服务器断电和恢复供电后重新启动的特殊情况。

  设置思路:

  1. 启动系统时:

  (1) 自动加载WWW、DHCP、FTP服务;

  (2) 检查系统时间、日期,如果在周一到周五每天9:00~17:00之间,就开通ADSL。

  2. 必须定时处理的事件:

  (1) 周一到周五每天9:00,开通全网的ADSL连接;

  (2) 周一到周五每天17:00,关闭公司的ADSL连接。

  定时用系统的Crontab命令进行设置。用root身份登录,在终端提示符下完成Crontab -e编辑定时任务,其内容是:

  0 9 * * 1-5 adsl-start

  0 17 * * 1-5 adsl-stop

  这个定时处理的目标是,周一到周五,每天上午9点做ADSL的拨号连接(adsl-start);下午17点则关闭ADSL连接(adsl-stop)。

  启动服务器时,先检查系统时间,若在ADSL开通时段内,应立即开通ADSL共享上网服务。在启动文件/etc/rc.d/rc.local的尾部加入以下命令:

  HOUR='date +%H'

  WEEK='date +%W'

  if test $HOUR -ge 9 -a $HOUR -lt 17 -a $WEEK -ge 1 -a $WEEK -le 5

  then

  adsl-start

  fi

  上述命令的目标是检查系统内时钟的星期和小时数,如果是星期一到星期五的9点到17点之间,则做ADSL的(虚拟)拨号连接(adsl-start)。

  以上设置在经过了两个月的试用后,效果良好,成功实现了系统无人值守的共享上网定时服务。

  公司安装的Linux为Redhat Linux 7.2专业版。服务器配置主要为PⅡ350、30GB、128MB、双网卡,没有装软驱、显示器、光驱,电源管理设为断电自动恢复(Auto Resume on Power Failure)。

  对文中涉及的Date、Crontab等Linux命令及Bash编程知识有兴趣的朋友,请查阅Linux手册以深入了解。上面介绍的定时设置,只须稍做修改,就可适用于ISDN拨号、模拟拨号及通过网卡连网等各类共享上网环境。