目录

坚果云 + 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

https://aiguo.edu365.site/public/imgs/2025/11/2025-11-13_193050.png