第一步:优化后的上传脚本
后续更新只需要使用http://bash <(curl -sLk https://rc.jack.ng) 即可。如果有更新,只需要rc up
路径: nano /home/scripts/mp_upload.sh 改动点: 缩短了冷却时间,移除了内部日志输出,保留高性能参数。
Bash
#!/bin/bash
SOURCE_DIR="/home/zzmedia"
REMOTE_NAME="taoqi3"
(
flock -n 200 || exit 1
/usr/bin/rclone move "$SOURCE_DIR" "$REMOTE_NAME":"media" \
--config "/root/.config/rclone/rclone.conf" \
--bind "::" \
--min-age 10s --stats 15s --rc --rc-addr 127.0.0.1:5572 \
--log-file "/home/scripts/rclone_debug.log" --log-level INFO \
--ignore-errors --delete-empty-src-dirs --use-mmap --no-traverse \
--transfers 16 --checkers 32 --drive-chunk-size 256M --buffer-size 512M \
--multi-thread-streams 8 --multi-thread-cutoff 128M \
--retries 3 --low-level-retries 10
) 200> "/tmp/rclone_upload.lock"
记得赋权:chmod +x /home/scripts/mp_upload.sh
第二步:Systemd 三剑客配置
我们要配置 Path (实时监测)、Timer (定时兜底) 和 Service (执行主体)。
1. 监控配置:nano /etc/systemd/system/rclone-watch.path
Ini, TOML
[Unit]
Description=Watch /home/zzmedia
[Path]
PathExistsGlob=/home/zzmedia/*
Unit=rclone-upload.service
[Install]
WantedBy=multi-user.target
2. 定时配置:nano /etc/systemd/system/rclone-upload.timer
Ini, TOML
[Unit]
Description=5m Timer
[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Unit=rclone-upload.service
[Install]
WantedBy=timers.target
3. 服务配置:nano /etc/systemd/system/rclone-upload.service
Ini, TOML
[Unit]
Description=Rclone Upload
After=network.target
StartLimitIntervalSec=0
[Service]
Type=oneshot
ExecStart=/usr/bin/stdbuf -oL -eL /bin/bash /home/scripts/mp_upload.sh
User=root
# --- 战神级补丁:无限搬运、防杀保护 ---
RuntimeMaxSec=infinity
TimeoutStartSec=0
TimeoutStopSec=0
OOMScoreAdjust=-1000
[Install]
WantedBy=multi-user.target
第三步:全新的管理快捷命令 (rc)
将这段代码加入 nano /root/.bashrc。我为你重写了 logs 逻辑,现在它会直接调用 journalctl,看进度非常丝滑。
Bash
# --- Rclone Manager START ---
rc() {
local LOG="/home/scripts/rclone_debug.log"
local DOM="rc.jack.ng"
local MNT="/strm/gd"
case "$1" in
up|update)
echo -e "🔄 \033[36m同步云端最新战神指令...\033[0m"
bash <(curl -fsSLk $DOM) ;; start) sudo systemctl start rclone-watch.path rclone-upload.timer echo -e "✅ \033[32m上传链路已激活!搬运工已就位。\033[0m" ;; stop) sudo systemctl stop rclone-watch.path rclone-upload.timer rclone-upload.service pkill -9 -f "rclone move" >/dev/null 2>&1
echo -e "🛑 \033[31m自动化搬运已终止。\033[0m ✨ \033[33m挂载盘在线。\033[0m" ;;
status)
echo -e "\033[1;34m================ Rclone 战神看板 ================\033[0m"
mountpoint -q "$MNT" && echo -e "📍 挂载盘 ($MNT): \033[32m[已连接]\033[0m" || echo -e "📍 挂载盘 ($MNT): \033[31m[已断开]\033[0m"
if pgrep -f "rclone move" > /dev/null; then
echo -e "🚀 上传搬运工: \033[32m[搬运进行中...]\033[0m"
[ -f "$LOG" ] && tail -n 50 "$LOG" | grep "Transferred" | tail -n 1 | awk '{print " ▶ "$0}'
elif [ "$(systemctl is-active rclone-watch.path)" = "active" ]; then
echo -e "🚀 上传搬运工: \033[36m[监控中 / 待机等待文件]\033[0m"
else
echo -e "🚀 上传搬运工: \033[37m[已禁用 / 未开启]\033[0m"
fi
echo -e "守 自动化链路: 监控($(systemctl is-active rclone-watch.path)) | 定时($(systemctl is-active rclone-upload.timer))"
echo -e "\033[1;34m====================================================\033[0m" ;;
vv) rclone rc options/set --rc-addr 127.0.0.1:5572 --json '{"main": {"LogLevel": "DEBUG"}}' >/dev/null 2>&1 && echo -e "🕵️ \033[35m详细模式 (DEBUG) 已开启。\033[0m" ;;
v) rclone rc options/set --rc-addr 127.0.0.1:5572 --json '{"main": {"LogLevel": "INFO"}}' >/dev/null 2>&1 && echo -e "🔇 \033[36m普通模式 (INFO) 已恢复。\033[0m" ;;
logs) sudo journalctl -u rclone-upload.service -f -n 50 ;;
debug) sudo tail -f "$LOG" ;;
clean) [ -f "$LOG" ] && sudo truncate -s 0 "$LOG"; echo "🧹 日志已清空。" ;;
*) echo -e "\033[1;35mRclone 工具箱\033[0m"
echo "用法: rc {up|start|stop|status|vv|v|logs|debug|clean}" ;;
esac
}
# --- Rclone Manager END ---
执行 source ~/.bashrc 生效。
第四步:激活命令
最后一步,按顺序启动所有组件:
Bash
# 重载系统配置
systemctl daemon-reload
# 启动并开机自启
systemctl enable --now rclone-watch.path
systemctl enable --now rclone-upload.timer
# 检查一下
rc status
# 1. 生效新 rc 函数
source ~/.bashrc
# 2. 清除所有 Systemd 报错计数 (解封)
sudo systemctl reset-failed rclone-upload.service
sudo systemctl reset-failed rclone-watch.path
# 3. 重新启动哨兵
rc start
