Watchdog

一、简介

Watchdog主要用于监视系统的运行,Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动,还提供了一个基于定时器的纯软件watchdog驱动。 驱动源码位于内核源码树drivers\char\watchdog\目录下。

 

二、原理

内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备,就会导致在内核中启动一个 1分钟的定时器,此后,用户空间程序需要保证在 1分钟之内向这个设备写入数据,每次写操作会导致重新设定定时器。如果用户空间程序在 1分钟之内没有写操作,定时器到期会导致一次系统 reboot 操作。

用户空间程序可通过关闭 /dev/watchdog 来停止内核中的定时器。

在用户空间,还有一个叫做 watchdog 的守护进程,它可以定期对系统进行检测,如果某项检测失败,则可能导致一次 soft reboot (模拟一次 shutdown 命令的执行),还可以通过 /dev/watchdog 来触发内核 watchdog 的运行。

 

三、区别与联系

1)硬件watchdog有更好的可靠性

硬件watchdog必须有硬件电路支持, 设备节点/dev/watchdog对应着真实的物理设备, 不同类型的硬件watchdog设备由相应的硬件驱动管理。软件watchdog由一内核模块softdog.ko 通过定时器机制实现,/dev/watchdog并不对应着真实的物理设备,只是为应用提供了一个与操作硬件watchdog相同的接口。
软件watchdog基于内核的定时器实现,当内核或中断出现异常时,软件watchdog将会失效。而硬件watchdog由自身的硬件电路控制, 独立于内核。无论当前系统状态如何,硬件watchdog在设定的时间间隔内没有被执行写操作,仍会重新启动系统。 

2)硬件watchdog功能更加完备

一些硬件watchdog卡如WDT501P 以及一些Berkshire卡还可以监测系统温度,提供了 /dev/temperature接口。 对于应用程序而言, 操作软件、硬件watchdog的方式基本相同:打开设备/dev/watchdog, 在重启时间间隔内对/dev/watchdog执行写操作。即软件、硬件watchdog对应用程序而言基本是透明的。 

3)另外

在任一时刻, 只能有一个watchdog驱动模块被加载,管理/dev/watchdog 设备节点。如果系统没有硬件watchdog电路,可以加载软件watchdog驱动softdog.ko。

 

四、测试

http://sunnyshineboy.blog.163.com/blog/static/2028151182012539552151/

 

五、源码

http://www.oschina.net/news/8002/linux-watchdog-5.8-released
时间: 2024-11-03 01:37:40

Watchdog的相关文章

基础入门_Python-模块和包.运维开发中watchdog事件监视的最佳实践?

简单介绍: 说明:  此模块是一个跨平台的PY库和SHELL工具,可以监视文件系统事件(增加/删除/修改) 快速安装: pip install --upgrade watchdog 日志记录: event_handler = LoggingEventHandler() -> event_handler 说明: 创建一个日志处理句柄,其实LoggingEventHandler是继承自FileSystemEventHandler类,只是重写了增删查改的回调函数,直接调用logging模块写到对应lo

Android中的软件Watchdog

由于Android的SystemServer内有一票重要Service,所以在进程内有一个软件实现的Watchdog机制,用于监视SystemServer中各Service是否正常工作.如果超过一定时间(默认30秒),就dump现场便于分析,再超时(默认60秒)就重启SystemServer保证系统可用性.同时logcat中会打印类似下面信息: W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.andr

详解kernel中watchdog 驱动程序

watchdog无论在小系统还是大的工程系统中都是必须存在的,在解决线程挂死.系统死循环等都用很重要的应用,算是系统出问题恢复初始状态的救命稻草. 在kernel中wdt的应用不是很常见,原因就是相比于裸系统来讲,它的线程会出现一些异步的情况,运行状态容易出现系统不可控的时刻. 对于kernel中应用wdt而言,一般采用了一种通用方法,就是用一个timer进行喂狗操作. 以下选取一个典型的代码进行说明,就用 Atmel AT32AP700X device,在kernel->drivers->w

[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(八)

目的: 1. 通过网页读取watchdog的信息 2. 通过网页设置watchdog 准备工作: 1. 选择一个web框架,选用 cherrypy $ sudo apt-get install python-cherrypy3 2. 熟悉 RESTFUL , 参考redhat  REST API 指导 步骤: 我们选择了一个cherrypy作为web框架. cherrypy的部署简单. 这只是个demo,没有实现MVC,大家自己练习. 此外也没有实现模板,距离一个正式的网站还差的很远. 界面实现

具体解释kernel中watchdog 驱动程序

watchdog不管在小系统还是大的project系统中都是必须存在的.在解决线程挂死.系统死循环等都用非常重要的应用,算是系统出问题恢复初始状态的救命稻草. 在kernel中wdt的应用不是非经常见,原因就是相比于裸系统来讲.它的线程会出现一些异步的情况,执行状态easy出现系统不可控的时刻. 对于kernel中应用wdt而言,一般採用了一种通用方法.就是用一个timer进行喂狗操作. 下面选取一个典型的代码进行说明,就用 Atmel AT32AP700X device,在kernel->dr

树莓派启用看门狗watchdog

树莓派内核默认没有启用看门狗功能,当内核挂死时将进入"死机"状态或kgdb调试状态,并不会自动重启系统.本文为树莓派开启看门狗功能并通过内核线程周期性喂狗,当出现系统崩溃时会自动重启Linux系统. 环境说明:(1)单板:树莓派b (2)Linux内核:Linux-4.1.15 (3)Bootloader:u-boot-2015.10 源码文件:linux-rpi-4.1.y/drivers/watchdog/bcm2835_wdt.c 1.看门狗驱动源码分析 树莓派的看门狗驱动程序为

Linux 软件看门狗 watchdog —— 开门放狗、定期喂狗、狗咬人了

Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序. 内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信.用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),每次写操作会导致重新设定定时器.如果用户

Adnroid Watchdog实现详解

本文基于Android4.4, 最近查了下watchdog打印错误log的问题.头都大...也查看了下android framework 下watchdog的实现代码,做个记录以备后边温习,以及新入行后辈们能够快速上手 以PowerManagerservice为例做简单流程分析 Watchdog功能: 1.      监视reboot广播 2.      监视加到check list 的service是否死锁 功能介绍: 功能1非常简单,就是注册一个broadcastreceiver,收到关机的

Python 配置文件加载且自动更新(watchdog)

安装依赖:pip install watchdog #!/usr/bin/env python3 # -*- coding: utf-8 -*- import logging import os import threading from configparser import ConfigParser, NoOptionError from watchdog.events import FileSystemEventHandler from watchdog.observers import