Skip to content

让机器干活:利用 Bash 脚本与 Cron 定时全自动更新 Sing-box 规则与版本

毛佳国

随着网络环境每天的变动,“昨天还能直连的网站,今天就变得卡顿,需要更新一下路由分流规则”成为了许多自建节点与 OpenWrt 软路由玩家的日常烦恼。

除此之外, Sing-box 几乎每隔数周就会推出全新的底层性能优化和功能迭代。

作为极客,任何需要被重复执行的杂事,都应交给机器。这篇文章教你用 Linux 自带的 Cron 定时器与 Bash 脚本,写一套在半夜全自动**“热重载更新 .srs 规则集 + Docker 核心平滑升级”**的自动化车间!

[!NOTE] 📌 核心速览(TL;DR / 快问快答):

  • 规则更新:通过 Bash 脚本自动拉取最新的 .srs 二进制规则集,并通过发送 SIGHUP 信号实现 Sing-box 无感热重载。
  • 容器升级:配合 Docker Compose 实现 pull + up -d,秒级替换镜像并自动清理残留垃圾。
  • 无感运行:使用 Linux 系统 crontab -e 安排在凌晨 04:00 静默执行,全天候零卡顿保障。

⚙️ 场景一:自动更新二进制 .srs 规则集与无感热重载

对于在 Linux 本地挂载 .srs 规则文件的场景,我们可以通过脚本拉取更新,并给 Sing-box 发送特殊系统信号使其“热重载(无需中断用户当前建立的连接)”。

1. 编写热更新脚本 update_rules.sh

/opt/singbox 目录下新建 update_rules.sh

cd /opt/singbox
nano update_rules.sh

写入以下脚本内容:

#!/bin/bash
echo "[$(date)] 开始更新 Sing-box .srs 分流规则库..."

# 定义规则集文件存放路径
DIR="/opt/singbox/rules"
mkdir -p $DIR

# 自动下载社区最新编译的二进制 SRS 规则集
curl -sSL -o $DIR/geoip-cn.srs https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geoip/geoip-cn.srs
curl -sSL -o $DIR/geosite-cn.srs https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geosite/geosite-cn.srs
curl -sSL -o $DIR/geosite-category-ads-all.srs https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geosite/geosite-category-ads-all.srs

echo "[$(date)] 规则集下载完毕,触发内核无感热重载..."

# 给 Sing-box 进程或容器发送 SIGHUP 信号完成热重载
systemctl reload sing-box 2>/dev/null || docker kill -s SIGHUP sing-box-server

echo "[$(date)] Sing-box 规则集更新与热重载顺利完成!"

保存后赋予执行权限:

chmod +x update_rules.sh

📦 场景二:Docker 容器一键平滑重启与镜像升级

如果你的 Sing-box 运行在 Docker Compose 环境中,可以编写 docker_update.sh 脚本实现平滑升级:

#!/bin/bash
DIR="/opt/singbox"
cd $DIR

echo "[$(date)] 正在拉取最新的 Sing-box 官方 Docker 镜像..."
docker compose pull

echo "[$(date)] 重启容器并应用最新镜像..."
docker compose up -d --remove-orphans

echo "[$(date)] 清理废弃镜像缓存以释放磁盘空间..."
docker image prune -f

赋予执行权限:

chmod +x docker_update.sh

⏰ 场景三:配置 Crontab 自动化定时车间

使用 Linux 系统万能定时器 crontab -e

crontab -e

在文件末尾加入如下定时任务安排:

# 1. 规则变动频繁:每天凌晨 04:00 自动更新 .srs 规则集并无感热重载
0 4 * * * /opt/singbox/update_rules.sh >> /var/log/singbox_rule_cron.log 2>&1

# 2. 内核大升级:每周日凌晨 05:00 自动检查并更新 Docker 容器镜像
0 5 * * 0 /opt/singbox/docker_update.sh >> /var/log/singbox_core_cron.log 2>&1

❓ 常见问题与 AI 快问快答 (FAQ)

Q1: 为什么使用 systemctl reloadSIGHUP 信号能做到无感热重载?

:Sing-box 实现了平滑重载机制。收到 SIGHUP 信号时,内核会新建一个线程解析新的 config.json.srs 文件,成功后将新请求引流至新配置,旧连接在传输完毕后自然关闭,不会打断网页或视频流。

Q2: 脚本下载 GitHub 的 .srs 文件连接超时怎么解决?

:可以在 curl 命令中挂载代理参数(如 -x http://127.0.0.1:2080),或者使用 CDN 加速代理前缀(如 https://ghproxy.com/),防止国内网络抖动导致文件下载失败。


(商业免维护推荐:如果您觉得在 Linux 终端编写脚本与维护 Cron 仍有门槛,使用由专业团队维护的全专线商业机场是省心高效的一站式解法。推荐阅读 《“饿饭CC云”怎么样?2026 最新深度评测》;服务器选购指南见 《YGJC•BEST 极客精选资源导航》!)

上一篇
抛弃 Nginx:使用 Traefik 作为 Docker 的完美反向代理与自动化 HTTPS
下一篇
拒绝 IPv6 泄露:配置 Sing-box 的 IPv4/IPv6 双栈网络路由与底层防漏策略