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
脚本说明
- 日志功能:
- 脚本会将运行日志记录到
/var/log/uhttpd_watchdog.log
文件中。 - 使用
log()
函数统一记录日志,方便查看。
- 服务状态检查:
- 使用
/etc/init.d/uhttpd status
检查uhttpd
是否运行。 - 如果服务未运行,则调用
/etc/init.d/uhttpd restart
重启服务。
- 检查间隔:
- 默认每 60 秒检查一次,可以通过修改
CHECK_INTERVAL
变量调整。
- 日志文件:
- 日志文件位于
/var/log/uhttpd_watchdog.log
,方便排查问题。
使用方法
- 保存脚本:
将脚本保存到/root/uhttpd_watchdog.sh
。 - 赋予执行权限:
运行以下命令,赋予脚本执行权限:
chmod +x /root/uhttpd_watchdog.sh
- 启动守护脚本:
直接运行脚本:
/root/uhttpd_watchdog.sh &
或者通过 nohup
运行:
nohup /root/uhttpd_watchdog.sh > /dev/null 2>&1 &
- 设置开机自启动:
为了让脚本在 OpenWrt 启动时自动运行,可以将其添加到/etc/rc.local
文件中:
echo "/root/uhttpd_watchdog.sh &" >> /etc/rc.local
验证脚本
- 手动停止 uhttpd:
运行以下命令停止uhttpd
服务:
/etc/init.d/uhttpd stop
- 查看日志:
查看日志文件/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
服务在意外停止时自动重启。如果有其他需求或问题,请随时告诉我!