蒹葭苍苍,白露为霜。
所谓伊人,在水一方。

在树莓派上实现 V2Ray 按时间段自动切换配置

在某些实际应用中,我们可能希望 V2Ray 在白天夜晚使用不同的出站节点。例如:

  • 白天(如 7:00~14:59)使用主线路(带宽高、延迟低)
  • 下午 15:00 至第二天早上使用CN2GIA线路(繁忙时间高速稳定性更好)

如果你在树莓派上运行 V2Ray,本文将教你如何使用 systemd 和简单的 Shell 脚本,让 V2Ray 自动按时间段切换配置,而且:

无需频繁重启
不会反复复制相同配置
不使用软链接,逻辑清晰易维护


🧱 系统环境

  • 系统:树莓派 OS(Debian / Raspbian 系)
  • V2Ray 安装路径:/usr/local/etc/v2ray/
  • 使用 systemd 管理服务:v2ray.service

⏱️ 思路简介

  1. 准备两份配置文件:config-day.jsonconfig-night.json
  2. 每隔 10 分钟由定时器执行一次切换逻辑脚本:
    • 获取当前小时
    • 判断是否为“白天时段”
    • 若当前配置与目标不一致,才会复制配置并重启服务
  3. 避免无意义的重启,延长设备寿命、节省资源

📂 目录结构示例

/usr/local/etc/v2ray/
├── config.json ← 当前实际配置(由脚本自动切换)
├── config-day.json ← 白天配置(7:00~14:59 使用)
├── config-night.json ← 夜间配置(15:00~6:59 使用)

🛠️ 一键部署脚本

你只需运行以下脚本,就能部署所有相关内容:

第一步:保存脚本文件

nano setup-v2ray-switch.sh

粘贴以下内容并保存退出:

#!/bin/bash

set -e

echo "📦 安装 V2Ray 配置自动切换..."

CONFIG_DIR="/usr/local/etc/v2ray"
SWITCH_SCRIPT="/usr/local/bin/v2ray-switch.sh"
SERVICE_FILE="/etc/systemd/system/v2ray-switch.service"
TIMER_FILE="/etc/systemd/system/v2ray-switch.timer"

cat << EOF > "$SWITCH_SCRIPT"
#!/bin/bash

DAY_CONFIG="$CONFIG_DIR/config-day.json"
NIGHT_CONFIG="$CONFIG_DIR/config-night.json"
TARGET_CONFIG="$CONFIG_DIR/config.json"

HOUR=\$(date +%H)

if [ "\$HOUR" -ge 7 ] && [ "\$HOUR" -lt 15 ]; then
MODE="day"
CANDIDATE="\$DAY_CONFIG"
else
MODE="night"
CANDIDATE="\$NIGHT_CONFIG"
fi

if cmp -s "\$CANDIDATE" "\$TARGET_CONFIG"; then
echo "[\$(date)] Current config already in \$MODE mode. No change needed."
exit 0
else
echo "[\$(date)] Switching to \$MODE mode."
cp "\$CANDIDATE" "\$TARGET_CONFIG"
systemctl restart v2ray
fi
EOF

chmod +x "$SWITCH_SCRIPT"

cat << EOF > "$SERVICE_FILE"
[Unit]
Description=Switch V2Ray config based on time
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=$SWITCH_SCRIPT
EOF

cat << EOF > "$TIMER_FILE"
[Unit]
Description=Run V2Ray config switcher every 10 minutes

[Timer]
OnBootSec=1min
OnUnitActiveSec=10min
Persistent=true

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable --now v2ray-switch.timer

echo "🚀 正在第一次执行切换脚本..."
"$SWITCH_SCRIPT"

echo "🕘 当前定时器状态:"
systemctl list-timers | grep v2ray

echo "✅ 安装完成!查看日志命令如下:"
echo " journalctl -u v2ray-switch.service -n 20 --no-pager"

第二步:执行安装

chmod +x setup-v2ray-switch.sh
sudo ./setup-v2ray-switch.sh

✅ 日常操作

查看当前切换状态:

systemctl list-timers | grep v2ray

查看最近执行日志:

journalctl -u v2ray-switch.service -n 20 --no-pager

🛑 如何停止或重启服务?

停止定时器(不再自动切换)

sudo systemctl stop v2ray-switch.timer
sudo systemctl disable v2ray-switch.timer

重新启用定时器

sudo systemctl enable --now v2ray-switch.timer

📌 小提示

  1. config-day.jsonconfig-night.json 中的 routing 区段可以设置不同的出站节点,例如:
{
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["in-8889"],
"outboundTag": "out-6800"
}
]
}
}

或:

{
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["in-8889"],
"outboundTag": "out-6900"
}
]
}
}
  1. 脚本通过 cmp -s 判断内容是否一致,避免不必要的重启操作。

✅ 总结

通过这个方法,你可以实现一个高效、无感、时间控制的 V2Ray 配置切换系统。非常适合资源敏感的设备如树莓派,或需要根据时段切换出口策略的场景。

赞(0) 打赏
未经允许不得转载:酷居科技 » 在树莓派上实现 V2Ray 按时间段自动切换配置

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

锦瑟无端五十弦,一弦一柱思华年

酷居科技联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏