第一步:优化后的上传脚本
路径: nano /home/scripts/mp_upload.sh 改动点: 缩短了冷却时间,移除了内部日志输出,保留高性能参数。
Bash
#!/bin/bash
# ================= 配置区域 =================
SOURCE_DIR="/home/zzmedia" # 确保这和 MP 的下载/移动路径一致
REMOTE_NAME="taoqi3"
REMOTE_PATH="media"
CONFIG_FILE="/root/.config/rclone/rclone.conf"
LOCK_FILE="/tmp/rclone_upload.lock"
# ===========================================
(
# 使用 flock 确保排他性运行,进程死掉锁会自动释放
flock -n 200 || exit 1
# 注意:这里去掉了 --log-file,日志会直接流向 Systemd Journal
/usr/bin/rclone move "$SOURCE_DIR" ${REMOTE_NAME}:"${REMOTE_PATH}" \
--config "$CONFIG_FILE" \
--min-age 10s \
--stats 15s \
-v \
--ignore-errors \
--delete-empty-src-dirs \
--use-mmap \
--no-traverse \
--transfers 16 \
--checkers 32 \
--drive-chunk-size 128M \
--buffer-size 512M \
--multi-thread-streams 8 \
--multi-thread-cutoff 128M \
--retries 3 \
--low-level-retries 10
) 200> "$LOCK_FILE"
记得赋权:chmod +x /home/scripts/mp_upload.sh
第二步:Systemd 三剑客配置
我们要配置 Path (实时监测)、Timer (定时兜底) 和 Service (执行主体)。
1. 监控配置:nano /etc/systemd/system/rclone-watch.path
Ini, TOML
[Unit]
Description=Real-time monitor for MP media folder
[Path]
# 改为监测目录非空,对 move 操作更灵敏
DirectoryNotEmpty=/home/zzmedia
Unit=rclone-upload.service
[Install]
WantedBy=multi-user.target
2. 定时配置:nano /etc/systemd/system/rclone-upload.timer
Ini, TOML
[Unit]
Description=5-minute fallback timer for Rclone upload
[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=MoviePilot Rclone Upload Service
After=network.target
[Service]
Type=oneshot
# 这里通过 stdbuf 强制开启行缓冲,保证日志实时性
ExecStart=/usr/bin/stdbuf -oL -eL /bin/bash /home/scripts/mp_upload.sh
User=root
[Install]
WantedBy=multi-user.target
第三步:全新的管理快捷命令 (rc)
将这段代码加入 nano /root/.bashrc。我为你重写了 logs 逻辑,现在它会直接调用 journalctl,看进度非常丝滑。
Bash
# Rclone 自动化管理工具 Pro 版 (V2.0 - 全控模式)
rc() {
case "$1" in
start)
# 启动监控和定时器,开启自动化链路
sudo systemctl start rclone-watch.path rclone-upload.timer
echo "✅ 自动化上传已启动:实时监控(Path)与 5 分钟兜底(Timer)已就绪。"
;;
stop)
# 停止所有相关单元,并强杀残留进程
sudo systemctl stop rclone-watch.path rclone-upload.timer rclone-upload.service
sudo pkill -9 rclone
echo "🛑 自动化上传已全线关闭,所有运行中的 rclone 进程已被强制终止。"
;;
run)
# 手动执行一次上传任务
sudo systemctl start rclone-upload.service
echo "🚀 已手动触发一次立即上传任务。"
;;
status)
echo "--- 自动化链路状态 ---"
sudo systemctl status rclone-watch.path rclone-upload.timer
;;
time)
echo "--- 下次兜底上传时间 ---"
sudo systemctl list-timers rclone-upload.timer
;;
logs)
echo "--- 正在实时查看上传日志 (Ctrl+C 退出) ---"
sudo journalctl -u rclone-upload.service -f -n 50
;;
*)
echo "用法: rc {start|stop|run|status|time|logs}"
echo " 1. rc start - [开启] 实时监控和定时任务"
echo " 2. rc stop - [关闭] 停止监控、定时器并强制杀掉所有进程"
echo " 3. rc run - [手动] 立即手动跑一次上传"
echo " 4. rc status - [查看] 监控和定时器是否运行中"
echo " 5. rc time - [时间] 查看下次定时器触发时间"
echo " 6. rc logs - [日志] 实时流式查看上传进度"
;;
esac
}
esac
}
执行 source ~/.bashrc 生效。
第四步:激活命令
最后一步,按顺序启动所有组件:
Bash
# 重载系统配置
systemctl daemon-reload
# 启动并开机自启
systemctl enable --now rclone-watch.path
systemctl enable --now rclone-upload.timer
# 检查一下
rc status
