在某些实际应用中,我们可能希望 V2Ray 在白天和夜晚使用不同的出站节点。例如:
- 白天(如 7:00~14:59)使用主线路(带宽高、延迟低)
- 下午 15:00 至第二天早上使用CN2GIA线路(繁忙时间高速稳定性更好)
如果你在树莓派上运行 V2Ray,本文将教你如何使用 systemd
和简单的 Shell 脚本,让 V2Ray 自动按时间段切换配置,而且:
✅ 无需频繁重启
✅ 不会反复复制相同配置
✅ 不使用软链接,逻辑清晰易维护
🧱 系统环境
- 系统:树莓派 OS(Debian / Raspbian 系)
- V2Ray 安装路径:
/usr/local/etc/v2ray/
- 使用 systemd 管理服务:
v2ray.service
⏱️ 思路简介
- 准备两份配置文件:
config-day.json
和config-night.json
- 每隔 10 分钟由定时器执行一次切换逻辑脚本:
- 获取当前小时
- 判断是否为“白天时段”
- 若当前配置与目标不一致,才会复制配置并重启服务
- 避免无意义的重启,延长设备寿命、节省资源
📂 目录结构示例
/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
📌 小提示
config-day.json
和config-night.json
中的routing
区段可以设置不同的出站节点,例如:
{
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["in-8889"],
"outboundTag": "out-6800"
}
]
}
}
或:
{
"routing": {
"rules": [
{
"type": "field",
"inboundTag": ["in-8889"],
"outboundTag": "out-6900"
}
]
}
}
- 脚本通过
cmp -s
判断内容是否一致,避免不必要的重启操作。
✅ 总结
通过这个方法,你可以实现一个高效、无感、时间控制的 V2Ray 配置切换系统。非常适合资源敏感的设备如树莓派,或需要根据时段切换出口策略的场景。