openwrt uhttpd 服务的守护脚本

在 OpenWrt 系统上,编写一个适用于 uhttpd 服务的守护脚本需要考虑到 OpenWrt 的特殊环境(如 BusyBox 的限制、初始化系统的差异等)。以下是专门为 OpenWrt 系统优化的 uhttpd 守护脚本。


OpenWrt 专用 uhttpd 守护脚本

将以下脚本保存为 /root/uhttpd_watchdog.sh

#!/bin/sh

# OpenWrt uhttpd 守护脚本
# 检查 uhttpd 服务状态如果停止则自动重启

SERVICE_NAME="uhttpd"
SERVICE_CMD="/etc/init.d/uhttpd"
CHECK_INTERVAL=60  # 检查间隔时间单位为秒
LOG_FILE="/var/log/uhttpd_watchdog.log"  # 日志文件路径

# 创建日志文件如果不存在
touch $LOG_FILE

# 日志函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

log "Starting uhttpd watchdog script..."

while true; do
    # 检查 uhttpd 是否在运行
    if ! $SERVICE_CMD status | grep -q "running"; then
        log "uhttpd is not running. Restarting..."
        $SERVICE_CMD restart >> $LOG_FILE 2>&1  # 重启服务并记录日志
        if $SERVICE_CMD status | grep -q "running"; then
            log "uhttpd restarted successfully."
        else
            log "Failed to restart uhttpd."
        fi
    else
        log "uhttpd is running."
    fi

    # 等待一段时间后再次检查
    sleep $CHECK_INTERVAL
done

脚本说明

  1. 日志功能
  • 脚本会将运行日志记录到 /var/log/uhttpd_watchdog.log 文件中。
  • 使用 log() 函数统一记录日志,方便查看。
  1. 服务状态检查
  • 使用 /etc/init.d/uhttpd status 检查 uhttpd 是否运行。
  • 如果服务未运行,则调用 /etc/init.d/uhttpd restart 重启服务。
  1. 检查间隔
  • 默认每 60 秒检查一次,可以通过修改 CHECK_INTERVAL 变量调整。
  1. 日志文件
  • 日志文件位于 /var/log/uhttpd_watchdog.log,方便排查问题。

使用方法

  1. 保存脚本
    将脚本保存到 /root/uhttpd_watchdog.sh
  2. 赋予执行权限
    运行以下命令,赋予脚本执行权限:
   chmod +x /root/uhttpd_watchdog.sh
  1. 启动守护脚本
    直接运行脚本:
   /root/uhttpd_watchdog.sh &

或者通过 nohup 运行:

   nohup /root/uhttpd_watchdog.sh > /dev/null 2>&1 &
  1. 设置开机自启动
    为了让脚本在 OpenWrt 启动时自动运行,可以将其添加到 /etc/rc.local 文件中:
   echo "/root/uhttpd_watchdog.sh &" >> /etc/rc.local

验证脚本

  1. 手动停止 uhttpd
    运行以下命令停止 uhttpd 服务:
   /etc/init.d/uhttpd stop
  1. 查看日志
    查看日志文件 /var/log/uhttpd_watchdog.log,确认脚本是否检测到服务停止并成功重启:
   cat /var/log/uhttpd_watchdog.log

注意事项

  • 日志文件大小
    如果日志文件过大,可以定期清理,或者使用 logrotate 工具管理日志。
  • 调试脚本
    如果脚本未按预期工作,可以手动运行脚本并观察输出:
  sh -x /root/uhttpd_watchdog.sh
  • 资源占用
    脚本会一直运行,占用少量系统资源。如果不需要,可以通过以下命令终止脚本:
  kill $(pgrep -f uhttpd_watchdog.sh)

这个脚本已经针对 OpenWrt 系统进行了优化,能够稳定运行并确保 uhttpd 服务在意外停止时自动重启。如果有其他需求或问题,请随时告诉我!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注