坚果云 + rclone 挂载部署指南(含通知)
目录
本文记录了在 linux 环境下,利用rclone挂载坚果云的部署参考教程。
坚果云 + rclone 挂载部署指南,包含:
-
自动创建挂载目录(如/mnt/blog /mnt/edu365)
-
部署service
rclone@.service -
配置检测脚本
/usr/local/bin/rclone-check.sh -
配合 Telegram + msmtp 邮件通知
-
systemd 定时器自动检测 & 重启
🔹 一、安装必要依赖并配置rclone
本教程依赖 fuse 和 msmtp:
sudo yum install -y fuse3
sudo yum install -y msmtp
fuse必须安装,否则rclone会报错,msmtp为可选安装,若要邮件通知需安装,本人vps采用msmtp发送邮件通知。
下载rclone至目录/opt/rclone,配置/opt/rclone/rclone.conf:
[edu365]
type = webdav
url = https://dav.jianguoyun.com/dav/edu365
vendor = other
user = 账户
pass = 密钥
[blog]
type = webdav
url = https://dav.jianguoyun.com/dav/blog
vendor = other
user = 账户
pass = 密钥
🔹 二、部署 rclone@.service
创建文件 /etc/systemd/system/rclone@.service:
[Unit]
Description=Rclone Mount for %i
Documentation=https://rclone.org/commands/rclone_mount/
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
# 自动创建挂载点目录
ExecStartPre=/bin/mkdir -p /mnt/%i
# 挂载命令
ExecStart=/opt/rclone/rclone mount %i:/ /mnt/%i \
--config /opt/rclone/rclone.conf \
--vfs-cache-mode=writes \
--vfs-cache-max-age 30m \
--vfs-cache-max-size 200M \
--allow-other \
--dir-cache-time 5m \
--poll-interval 30s \
--timeout 30m \
--umask 002 \
--log-file /var/log/rclone-%i.log \
--log-level INFO
# 停止时卸载
ExecStop=/bin/fusermount -uz /mnt/%i
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=3
TimeoutStopSec=20
[Install]
WantedBy=multi-user.target
启用挂载服务示例:
systemctl daemon-reload
systemctl enable --now rclone@blog
systemctl enable --now rclone@edu365
systemctl status rclone@blog
🔹 三、部署 rclone 检测脚本
创建 /usr/local/bin/rclone-check.sh:
#!/bin/bash
# ====================================================
# Rclone 自动检测 + Telegram + msmtp 邮件通知脚本
# ====================================================
RCLONE="/opt/rclone/rclone"
CONFIG="/opt/rclone/rclone.conf"
LOG_DIR="/var/log"
MOUNT_BASE="/mnt"
TIMEOUT=60 # 秒,lsjson 超时时间
# Telegram + 邮件配置
BOT_TOKEN="1234567890:ABCdefGhIJKlmNoPQRstuVwxyz" #修改为你的telegram token
CHAT_ID="123456789" #修改为你的telegram id
EMAIL_TO="youremail@example.com" #修改为你的邮件邮箱
HOSTNAME=$(hostname)
send_alert() {
MESSAGE="$1"
TITLE="🚨 [$HOSTNAME] Rclone Alert"
# Telegram
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="*${TITLE}*%0A${MESSAGE}%0A⏰ $(date '+%F %T')" \
-d parse_mode="Markdown" >/dev/null 2>&1
# 邮件 (msmtp)
echo -e "$MESSAGE\n\n时间:$(date '+%F %T')" | msmtp "$EMAIL_TO"
}
# 自动发现 rclone@*.service 实例
MOUNTS=$(systemctl list-units --type=service --all | grep -oP 'rclone@\K[^.]+(?=\.service)' | sort -u)
[ -z "$MOUNTS" ] && exit 0
for name in $MOUNTS; do
MOUNTPOINT="$MOUNT_BASE/$name"
LOG_FILE="$LOG_DIR/rclone-$name.log"
FAIL_FILE="/tmp/rclone-$name.fail"
[ -d "$MOUNTPOINT" ] || mkdir -p "$MOUNTPOINT"
# 检查挂载状态
if ! mount | grep -q "$MOUNTPOINT"; then
send_alert "$name 挂载掉线,正在自动重启。"
systemctl restart rclone@$name
continue
fi
# 检查远程响应
timeout "$TIMEOUT" $RCLONE --config "$CONFIG" lsjson "$name:" --max-depth 1 >/dev/null 2>&1
if [ $? -ne 0 ]; then
COUNT=$(cat $FAIL_FILE 2>/dev/null || echo 0)
COUNT=$((COUNT+1))
echo $COUNT > $FAIL_FILE
if [ $COUNT -ge 2 ]; then
send_alert "$name 无响应,已重启"
systemctl restart rclone@$name
echo 0 > $FAIL_FILE
fi
else
echo 0 > $FAIL_FILE
fi
done
保存并赋予执行权限:
chmod +x /usr/local/bin/rclone-check.sh
🔹 四、创建 systemd 定时器
服务文件 /etc/systemd/system/rclone-check.service
[Unit]
Description=Rclone mount auto-check service
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/rclone-check.sh
定时器文件 /etc/systemd/system/rclone-check.timer
[Unit]
Description=Run rclone-check every 10 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=10min
Persistent=true
[Install]
WantedBy=timers.target
启用定时器:
systemctl daemon-reload
systemctl enable --now rclone-check.timer
systemctl list-timers | grep rclone
🔹 五、测试并确认
- 手动检测:
/usr/local/bin/rclone-check.sh
- 查看日志:
journalctl -u rclone@blog -f tail -f /var/log/rclone-blog.log
[root@hk ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 479M 0 479M 0% /dev
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 491M 50M 441M 11% /run
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/sda3 14G 8.3G 5.3G 62% /
/dev/sda1 1014M 136M 879M 14% /boot
tmpfs 99M 0 99M 0% /run/user/0
blog: 1.0P 0 1.0P 0% /mnt/blog
edu365: 1.0P 0 1.0P 0% /mnt/edu365
[root@hk ~]# ls /mnt/edu365/
blog css etc js sh
