银河麒麟V10看门狗试验-1

第一步:加载软看门狗模块

bash 复制代码
# 查看当前是否已加载看门狗
lsmod | grep wdt

# 加载内核自带的软看门狗驱动
modprobe softdog

# 确认加载成功
lsmod | grep softdog
# 输出示例:softdog   16384  0

# 确认设备文件已生成
ls -la /dev/watchdog*
# 输出示例:crw------- 1 root root 10, 130  /dev/watchdog
# 或          /dev/watchdog0

第二步:查看当前状态

bash 复制代码
# 查看系统日志,确认看门狗已初始化
dmesg | grep -i watchdog
# 输出示例:
# [xx] softdog: Software Watchdog Timer: 0.08 initialized.
# [xx] softdog: initialized. soft_noboot=0 soft_margin=60 sec soft_panic=0

# 这里 soft_margin=60 表示超时 60 秒
# soft_noboot=0 表示超时后会重启系统

第三步:写一个喂狗程序

用 Python 最简单,不需要编译:

bash 复制代码
#!/usr/bin/env python3
"""
看门狗喂狗程序
每30秒喂一次狗,超时时间60秒------只要超过60秒没喂,系统就重启
"""

import sys
import time
import signal

WATCHDOG_DEV = "/dev/watchdog"

def main():
    # 打开看门狗设备
    try:
        fd = open(WATCHDOG_DEV, "w")
    except PermissionError:
        print("请用 sudo 运行此脚本")
        sys.exit(1)

    print(f"看门狗已打开: {WATCHDOG_DEV}")
    print("每15秒喂狗一次,按 Ctrl+C 停止(停止后系统会在60秒内重启)")

    # 优雅退出时关闭看门狗(可选,看试验需求)
    def graceful_exit(sig, frame):
        print("\n收到信号,正在关闭看门狗...")
        try:
            # 写入魔术字符 V 可以安全关闭 softdog
            fd.write("V")
            fd.flush()
            print("看门狗已安全关闭")
        except:
            pass
        fd.close()
        sys.exit(0)

    signal.signal(signal.SIGINT, graceful_exit)
    signal.signal(signal.SIGTERM, graceful_exit)

    # 主循环:定期喂狗
    while True:
        try:
            fd.write("X")   # 写入任意非V字符就是喂狗
            fd.flush()
            print(f"[{time.strftime('%H:%M:%S')}] 喂狗成功")
            time.sleep(15)
        except OSError as e:
            print(f"喂狗失败: {e}")
            break

if __name__ == "__main__":
    main()

第四步:运行试验

4.1 安全重启测试

bash 复制代码
# 运行喂狗程序
python3 watchdog_test.py

# 输出:
# 看门狗已打开: /dev/watchdog
# 每15秒喂狗一次,按 Ctrl+C 停止(停止后系统会在60秒内重启)
# [14:30:00] 喂狗成功
# [14:30:15] 喂狗成功
# [14:30:30] 喂狗成功

# 此时按 Ctrl+C,程序优雅退出,写入 'V' 关闭看门狗
# 系统不会重启

4.2 模拟死机测试(核心试验)

再开一个终端,模拟程序异常崩溃

bash 复制代码
# 先启动喂狗程序
sudo python3 watchdog_test.py &

# 记下它的 PID
ps aux | grep watchdog_test

# 模拟程序死机:直接杀掉进程
sudo kill -9 <PID>

# 或者用这个更强力的方法:
sudo killall -9 python3

观察现象

bash 复制代码
# 在一个独立终端里持续监控
watch -n 1 dmesg | tail -3

你会看到类似这样的日志:

bash 复制代码
softdog: WDT timeout, initiating system reboot
reboot: Restarting system

然后系统会在 60 秒后自动重启(60 秒是默认超时时间)。

第五步:调参

修改超时时间

bash 复制代码
# 卸载模块
sudo rmmod softdog

# 重新加载,设置超时为 10 秒(方便快速看到效果)
sudo modprobe softdog soft_margin=10

# 验证
cat /sys/module/softdog/parameters/soft_margin
# 输出: 10

检查 systemd 是否在占用看门狗

银河麒麟的 systemd 默认可能已经打开了看门狗:

bash 复制代码
# 查看 systemd 的看门狗配置
systemctl show | grep -i watchdog

# 如果 RuntimeWatchdogUSec 有值,说明 systemd 在用
# 此时你的程序打不开 /dev/watchdog

# 临时关掉 systemd 的看门狗(需要重启生效)
# 编辑 /etc/systemd/system.conf
# 注释掉 RuntimeWatchdogSec
相关推荐
Cry丶5 小时前
ubuntu安装vsftpd
服务器·网络·ubuntu
外收内放8 小时前
面向对象高级(实战案例)
开发语言·python·学习
专业程序开发源8 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
FPGA小迷弟8 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
卷无止境9 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
fanruitian9 小时前
python else用法
开发语言·python
SHENGWEI胜为9 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
Thinker QAQ9 小时前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
用户8356290780519 小时前
如何使用 Python 对 Excel 数据进行分组和分级显示
后端·python
vx_Biye_Design10 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express