[LinuxFocus-icon]
首页  |  站点地图  |  索引  |  搜索

新闻 | 过往期刊 | 链接 | 关于LF
This document is available in: English  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

[Photo of the Author]
by Guido Socher (homepage)

关于作者:

Guido 喜欢Linux不但因为了解操作系统如何工作是一件有趣的事,而且也应为沉迷于它的设计的人们


目录:

 

A Hardware watchdog and shutdown button

[Illustration]

摘要:

制作LCD控制面板 中揭示了如何尽最大可能构建一个基于微处理器的LCD控制面板 通常情况下我们不需要所有的特点,我们所构建的硬件很廉价(这个LCD控制面板是市场上已经商品化)并且具有和其他LCD屏不同的两个重要特点.

硬件只是由很多有效的零件组成,您可以毫不费力地得到他们,所有的零件加起来不到5欧元



 

什么是看门狗?

看门狗在计算机系统中是一个最忠实的可信赖的硬件,用来保证系统长久运行,您能够在火星发射器中(人们通过按复位键来发射一个人到火星上?)或者其他昂贵的装置中找到类似设备.

看门狗的使用思路很简单:计算机必须不时地对看门狗说"你好"以让看门狗知道它依然在运行,如果这种操作失败,看门狗的动作就会引起系统硬件复位。

由于一个Linux服务器需要几个月不间断工作,平均大概1-2年不发生死机现象,如果您的机器每几周就会死机那么这台机器一定有异常并且看门狗不能解决问题,必须要检查使得CPU过热的错误的RAM(参见 memtest86.com),太长的IDE连接线...

如果一个Linux系统能够在看门狗的监控下如此可靠地无故障运行一年,您还有什么理由不使用看门狗呢?答案很简单:看门狗让系统更可靠。就像人类解决自己的问题一样。 一台服务器无故障运行一年基本上不为人所知,如果它出了问题也没有人知道吗?那可能就是它刚好赶在圣诞节前所有人都在家里的时候死机。为了防止这些,看门狗就显得很有用.

但是看门狗不能解决所有问题,在有缺陷的硬件面前它也会显得无能为力,即使在你的系统有一个看门狗,你也应该注意确保一个良好的硬件环境(至少不应该是BIOS的BUG和芯片本身的BUG)以及适度的冷却系统。  

如果使用看门狗?

看门狗的设计仅仅为了保证用户区程序的运行,为了拥有一个确信的、稳定系统,您还必须监控您的应用程序(网络服务,数据库)和系统资源(磁盘空间,CPU温度)。您也可以通过其他的用户应用程序来达到目的(crontab),所有这些阐述都在LCD控制板主题,在此,我不详述了.

例如:这是个小脚本它能够监控网络运行,内存交换以及磁盘应用情况。


#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
export PATH
#
# Monitor the disk
# ----------------
# check if any of the partitions are more than 80% full.
# (crontab will automatically send an e-mail if this script
# produces some output)
df | egrep ' (8.%|9.%|100%) '
#
# Monitor the swap
# A server should normally be dimensioned such that it
# does not swap. Swap space should therefore be constant
# and limited.
# ----------------
# check if more than 6 Mb of swap are used
swpfree=`free | awk '/Swap:/{ print $3 }'`
if expr $swpfree \> 6000 > /dev/null ; then
    echo "$0 warning! swap usage is now $swpfree"
    echo " "
    free
    echo " "
    ps auxw
fi
#
# Monitor the network
# -------------------
# your _own_ IP addr or hostname:
hostn="linuxbox.your.supercomputer"
#
if ping -w 5 -qn -c 1 $hostn > /dev/null ; then
    # ok host is up
    echo "0" > /etc/pingfail
else
    # no answer count up the ping failures
    if [ -r /etc/pingfail ]; then
        pingfail=`cat /etc/pingfail`
    else
        # we do not handle the case where the
        # pingfail file is missing
        exit 0
    fi
    pingfail=`expr "$pingfail" "+" 1`
    echo "$pingfail ping failures"
    echo "$pingfail" > /etc/pingfail
    if [ $pingfail -gt 10 ]; then
        echo "more than 10 ping failures. System reboot..."
        /sbin/shutdown -t2 -r now
    fi
fi
# --- end of monitor script ---

结合上面的这些和crontab入口来每隔15分钟运行这个脚本一次

1,15,30,45 * * * * /where/the/script/is

 

看门狗的硬件组成

继电器并不标准,每一种产品都有他自己的设计特点,对我们的电路来说,最重要的是其内部电阻值,您可以看到下面两张图,一张为 5V,500 欧姆电阻的继电器,一组为5V,120欧姆电阻的继电器,你可以用你已有的欧姆表测量出继电器的电阻值,通过点击原理图放大查看大图.
120 欧姆继电器:
[120 Ohm relay]
500 欧姆继电器:
[500 Ohm relay]

关闭按钮为一个接在RTS和CD上的轻触开关。电路图上看起来有点陌生是因为Eagle公司没有提供一个更好的图标。

在这里我没有列出详细的元件清单,你可以在上面的原理图里面找到想要的一切(别忘记连接串口线的DB9插头 ),里面的二极管您可以使用任意型号的替换,如1N4148.我个人认为,500欧姆继电器的电路要好一些,因为您不需要R4和2000uF(或者2200uF)电容,电容C1只需要一个较小的1000uF电容就够了,

请注意:在120欧姆的电路里你需要一个红灯,而在500欧姆电路里需要一个绿灯,这不是闹着玩的,因为绿灯的压降比红灯要大。
线路板设计方面,Eagle文件和关于线路板腐蚀面的注释都在后面的软件包中Eagle CAD在Linux下的设计软件来自于 cadsoftusa.com.  

电路是如何工作

看门狗硬件电路围绕NE555时基芯片搭建,这个芯片包含两个比较器,一个RS触发器和三个5K电阻提供比较器的参考电压,只要门限引脚(6)超过2/3电源电压 就会引起RS触发器置位(状态有效)。
[ne555]
现在来看我们的电路图:我们利用串口的RTS引脚提供电源电压,由于RS232串口电压是+/-10V,因此,我们在电容C1前面必须要一个二极管。C1快速充放电以维持时刻提供系统能源。电阻C2则比较缓慢地通过4.7M 电阻充放电。RS232串口DTR引脚上的脉冲控制晶体管T1放掉电容C2上的电荷.如果这个脉冲没有(由于计算机死机)电容C2上的电压最终(大约40秒)就会超过2/3电源电压,从而引起RS触发器置位。

电容C1,电阻R2和LED发光管,继电器参数需要经过调试,由于让继电器快速闭合的能量来自C1,而C1提供的电流不足以让继电器长时间维持导通。我们必须通过"按下""复位"键1-2秒.来关闭继电器导通状态。

LED发光管一直保持发光直到系统在复位以后重新恢复运行.

您一定看到了原理图里面接在CD引脚上的关机按钮,只要您轻触它(保持15秒)之后驱动软件就会运行"shutdown -h now"命令并关闭系统服务器。这是给常规系统维护用的和看门狗毫无关系!  

驱动软件

驱动软件是一个小的C程序可以由/etc/init.d/脚本运行,它不停地翻转RS232的RTS引脚并且每隔12秒钟发送一个脉冲给DTR(看门狗的定时时间40秒),当您正常关闭计算机,程序就会关闭RTS信号并且给出最后一个DTR脉冲。这样的目的就是在超时发生之前放掉电容(C1)上的电荷.因此,正常情况下,看门狗就不会受到电流冲击。要安装这个软件请解开linuxwd-0.3.tar.gz压缩包,您可以从 文件下载链接 得到这个文件,然后解压缩运行make命令进行编译。
并且拷贝这个linuxwd可执行文件到/usr/sbin/linuxwd.编辑当前linuxwd_rc脚本(如redhat/mandrake,或者linuxwd_rc_anydist 如果是其他类型的系统),然后输入正确的串口地址(如 ttyS1=COM2 或者 ttyS0=COM1),然后拷贝这个rc脚本到
/etc/rc3.d/S21linuxwd

/etc/rc5.d/S21linuxwd
即大告功成了.  

系统测试

当您已经焊接好了所有的元件以后,您必须在连接到计算机之前进行必要的测试。将接下来需要连接到串口RTS引脚的线接上9-10V直流电源,并且等待40-50秒钟.您就会听到继电器闭合的很轻的响声,同时发光管也会发亮。注意不能让继电器保持长时间导通。LED指示灯将会长亮,直到您把接DTR引脚的信号线接+10V。
当您经过上述检验以后,您就完全可以把它连接到电脑上去了,这个linuxwd程序有一个测试模式,在它输出一些打印信息并停留一段时间才发送脉冲给DTR,用来模拟系统死机现象,使用命令

linuxwd -t /dev/ttyS0

让 linuxwd 运行在测试模式 (使用 /dev/ttyS1 如果您的硬件连接在COM2上).  

硬件安装

RS232接口信号如下: 9 PIN D-SUB MALE

计算机方向的 9 针D型插头。

9 PIN-connector 25 PIN-connector Name Dir Description
1 8 CD input Carrier Detect
2 3 RXD input Receive Data
3 2 TXD output Transmit Data
4 20 DTR output Data Terminal Ready
5 7 GND -- System Ground
6 6 DSR input Data Set Ready
7 4 RTS output Request to Send
8 5 CTS input Clear to Send
9 22 RI input Ring Indicator

线路板安装到RS232串口的时候一定要正,您必须先通过查找计算机的复位按钮来查找系统复位线,并且把它连接到继电器的输出端,继电器的输出端并联在复位按钮上。
 

结论

看门狗不是100%保证系统的稳定,但是,它会提高系统的安全性能,最主要的问题是在系统硬件复位以后,文件系统如何找到没有完成的工作的位置,最新的日志文件或许可以帮忙,但是我没有试图进行论述。这里介绍的看门狗非常便宜,也不难制作并且几乎和大部分商品一样好。  

参考

   

对这篇文章发表评论

每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
 反馈页面 

主页由LinuxFocus编辑组维护
© Guido Socher, FDL
LinuxFocus.org

点击这里向LinuxFocus报告错误或提出意见
翻译信息:
en --> -- : Guido Socher (homepage)
en --> zh: hejoin <tech(at)hejoin.com>

2002-07-24, generated by lfparser version 2.25