死循环后台守护监控本质是用while true+sleep定期检查并自动恢复目标状态,适用于轻量场景;需控制休眠时长、精简操作、添加日志、明确定义异常判断与修复动作,并通过nohup或systemd实现真正后台化。

用死循环实现后台守护监控,本质是让脚本持续运行、定期检查目标状态,并在异常时自动恢复。它不是最健壮的方案(比如 systemd 服务更可靠),但在轻量场景、快速验证或资源受限环境里很实用。
核心结构:while true + sleep 控制节奏
死循环必须带可控休眠,否则会 100% 占满一个 CPU 核心。典型写法是:
- while true; do ... ; sleep N; done —— N 一般设为 5~30 秒,太短加重系统负担,太长响应滞后
- 循环体里只做关键判断和必要操作,避免阻塞或长耗时任务
- 建议加日志输出,方便排查问题,例如:echo "$(date) - checking..." >> /var/log/mywatch.log
监控逻辑要明确“查什么”和“怎么修”
不能只检测,必须定义清楚正常态与异常态,并给出可执行的修复动作。常见模式有:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 服务存活检查:用 pgrep -f "service_name" 或 systemctl is-active --quiet service_name 判断进程是否在运行;若不在线,执行 systemctl start service_name
- 网络连通性检查:用 ping -c1 -W2 target_ip &>/dev/null 测试可达性;失败时可尝试重启网卡或对应服务
- ZeroTier/Tailscale 状态检查:如资料中所示,通过 zerotier-cli info 和 zerotier-cli listnetworks 提取关键字段(ONLINE / OK);任一不满足就执行 zerotier-cli join $NETWORK_ID
启动方式要真正“后台化”,避免挂断中断
直接 ./watch.sh & 启动仍可能随终端关闭被终止(收到 SIGHUP)。稳妥做法是:
- 用 nohup ./watch.sh > /dev/null 2>&1 & 启动,屏蔽输入输出并忽略挂断信号
- 更推荐写成 systemd 服务 —— 脚本本身保持简单死循环,由 systemd 管理生命周期、自动重启、日志归集
- 若必须纯脚本,可在循环开头加 trap '' HUP 显式忽略挂起信号
注意资源与稳定性细节
长期运行的死循环容易因疏忽引入隐患:
- 避免在循环里重复打开大文件或创建大量子进程,防止句柄泄漏或 fork 失败
- 对关键命令加超时控制,比如 timeout 10 zerotier-cli listnetworks,防止单次卡死拖垮整个循环
- 建议加入“连续失败计数”机制(如连续 3 次异常才重启),避免网络抖动引发频繁误操作
- 脚本自身 PID 可写入 /var/run/watch.pid,便于后续 kill 或状态查询

















