watchdog 实际上是一个用于系统主动重启的计时器,默认倒计时为60秒,系统在60秒内往 /dev/watchdog 设备中进行一次写操作,如果成功则归零计时器,重新倒计时。如果在60秒内,没有任何写操作,watchdog 便认为系统发生严重故障,主动重启系统,以求自救而不是等死。其重启会进行如下步骤:

  1. 关闭所有打开的文件
  2. 如果sendmail应用存在,配置文件中提供了管理员的email地址,将发封email给管理员
  3. 通知系统重启
  4. 将重启信息记入系统日志kill掉所有进程将重启信息记入wtmp
  5. 关闭倒计时,磁盘限额,交换分区
  6. 卸载所有非根文件系统
  7. 以只读方式重新装载根文件系统(这个十分重要,防止破坏系统,因为被动重启有可能破坏系统)
  8. 关闭网络接口
  9. 重启系统

安装包和使用

yum install watchdog -y
modprobe softdog
chkconfig watchdog  on
/etc/init.d/watchdog start

/etc/watchdog.conf配置

#min-memory      = 1      #注意,这里指内存页面数,该值需要乘以getconf PAGESIZE获取的结果
interface = eth0
watchdog-device  = /dev/watchdog 
interval         = 10     #每间隔10秒钟往/dev/watchdog设备中执行一次写操作。 
logtick          = 60     #睡眠时间,持续写日志到syslog很耗磁盘空间和CPU资源,此选项会隔一段时间写一次,节省资源。 

realtime       = yes      #实时监控,将watchdog 封入内存,防止在系统高负载时watchdog 意外退出。 
priority         = 1      #优先级 
repair-binary= /etc/watchdog.d/repair.sh

repair.sh内容如下:

#!/usr/bin/env bash
ifconfig eth0 >/dev/null
if [$? != “0”];then
   ifup eth0
fi

以上是对eth0网卡进行自动值守的示例,当网卡异常时,会自动ifup eth0 。

注:如果repair 失败的话,watchdog依然会重启系统,这个需要注意!可以通过在repair 脚本中加入 exit 0 来防止watchdog 重启系统,即无论修复是否成功,都返回成功,骗过watchdog 的重启机制。

注意点

执行 less -f /dev/watchdog查看后,主机会重启。发现默认只在物理机上才会有/dev/watchdog生成,在虚拟机中未发现。虚拟机上的需要modprobe softdog后才会产生/dev/watchdog文件。

参考文档:

使用 watchdog 构建高可用性的 Linux 系统及应用

利用watchdog 实现智能监控

python实现


donation