watchdog 实际上是一个用于系统主动重启的计时器,默认倒计时为60秒,系统在60秒内往 /dev/watchdog 设备中进行一次写操作,如果成功则归零计时器,重新倒计时。如果在60秒内,没有任何写操作,watchdog 便认为系统发生严重故障,主动重启系统,以求自救而不是等死。其重启会进行如下步骤:
- 关闭所有打开的文件
- 如果sendmail应用存在,配置文件中提供了管理员的email地址,将发封email给管理员
- 通知系统重启
- 将重启信息记入系统日志kill掉所有进程将重启信息记入wtmp
- 关闭倒计时,磁盘限额,交换分区
- 卸载所有非根文件系统
- 以只读方式重新装载根文件系统(这个十分重要,防止破坏系统,因为被动重启有可能破坏系统)
- 关闭网络接口
- 重启系统
安装包和使用
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文件。