用clone通过webdav协议挂载123pan详细教程

第一步

下载并安装最新版 rclone

sudo apt update
sudo apt install curl -y
curl https://rclone.org/install.sh | sudo bash

第二步安装成功后配置
rclone config
输入 n 创建新配置。
输入配置名称(如 123pan)。
选择存储类型:输入 webdav。
选择供应商:输入 other(如果 123Pan 不在列表中)。
输入 WebDAV 地址(需从 123Pan 获取,示例):
url = https://webdav-xxxxxxx.pd1.123pan.cn/webdav
输入 用户名 和 密码(123Pan 账号的 WebDAV 专用凭证)。
其他选项保持默认(直接按回车跳过)。

完整配置示例
[123pan]
type = webdav
url = https://webdav-xxxxxxx.pd1.123pan.cn/webdav
vendor = other
user = your_username
pass = your_password


第三步 创建挂载目录
sudo mkdir -p /mnt/123pan

确保当前用户有权限

sudo chown -R $USER:$USER /mnt/123pan


第四步挂载

基础挂载命令

rclone mount 123pan: /mnt/123pan \
  --vfs-cache-mode full \
  --allow-other \
  --umask 000 \
  --daemon
  
  
关键参数解释:
参数和作用
--vfs-cache-mode full 启用本地缓存,避免网络波动导致 I/O 错误
--allow-other 允许其他用户访问挂载点
--umask 000 设置文件权限为 777(可读写)
--daemon 后台运行

第五步验证挂载状态

查看挂载点

df -h | grep 123pan

访问文件

ls -l /mnt/123pan


第六步 创建自启动
sudo nano /etc/init.d/rclone-123pan
脚本参考内容如下

!/bin/sh

BEGIN INIT INFO

Provides:          rclone-123pan

Required-Start:    $network $remote_fs $syslog

Required-Stop:     $network $remote_fs $syslog

Default-Start:     2 3 4 5

Default-Stop:      0 1 6

Short-Description: Mount 123Pan via rclone

Description:       Mount 123Pan WebDAV to /www/wwwroot/alldata

END INIT INFO


配置项(根据实际情况修改)

USER="root"                  # 运行服务的用户
RCLONE_CONFIG_NAME="123pan"  # rclone配置的名称
MOUNT_DIR="/www/wwwroot/alldata"  # 挂载目录
LOG_FILE="/var/log/rclone-123pan.log"  # 日志文件路径

Rclone 参数

RCLONE_OPTS="--vfs-cache-mode full --allow-other --umask 000 --daemon --log-file=${LOG_FILE}"

Rclone 可执行路径(通过 which rclone 获取)

RCLONE_BIN="/usr/bin/rclone"

case "$1" in
  start)
    echo "Starting rclone mount for 123Pan..."
    if [ ! -d "${MOUNT_DIR}" ]; then
      mkdir -p "${MOUNT_DIR}"
      chown ${USER}:${USER} "${MOUNT_DIR}"
    fi
    su - ${USER} -c "${RCLONE_BIN} mount ${RCLONE_CONFIG_NAME}: ${MOUNT_DIR} ${RCLONE_OPTS}"
    ;;
  stop)
    echo "Stopping rclone mount for 123Pan..."
    fusermount -uz "${MOUNT_DIR}"
    ;;
  restart)
    $0 stop
    sleep 3
    $0 start
    ;;
  status)
    if mount | grep -q "${MOUNT_DIR}"; then
      echo "rclone-123pan is running."
    else
      echo "rclone-123pan is NOT running."
    fi
    ;;
  *)
    echo "Usage: /etc/init.d/rclone-123pan {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0


设置下权限
sudo chmod +x /etc/init.d/rclone-123pan
添加到开机启动
sudo update-rc.d rclone-123pan defaults
启动服务:
sudo service rclone-123pan start
停止服务:
sudo service rclone-123pan stop
查看状态:
sudo service rclone-123pan status
重启服务:
sudo service rclone-123pan restart

验证挂载

查看挂载点

df -h | grep alldata

访问文件

ls -l /www/wwwroot/alldata



第七步 创建监控脚本
保存为 /usr/local/bin/check_rclone_mount.sh:

!/bin/bash

Rclone 挂载状态监控脚本

作者:你的名字

日期:2023-10-01


配置项(根据实际情况修改)

MOUNT_DIR="/www/wwwroot/alldata"      # 挂载点目录
RCLONE_SERVICE="rclone-123pan"        # 服务名称(对应init.d脚本名称)
LOCK_FILE="/tmp/check_rclone.lock"    # 锁文件防止重复执行
MAX_RETRIES=3                        # 最大重试次数
RETRY_DELAY=10                       # 重试间隔(秒)
LOG_FILE="/var/log/rclone_monitor.log" # 日志文件

函数:记录日志带时间戳

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}

检查锁文件避免并发执行

if [ -f $LOCK_FILE ]; then
  log "另一个监控进程正在运行,跳过本次检查。"
  exit 1
fi
touch $LOCK_FILE

核心检测逻辑

if ! mount | grep -q "$MOUNT_DIR"; then
  log "检测到挂载点 $MOUNT_DIR 未挂载,尝试恢复..."
  attempt=1
  while [ $attempt -le $MAX_RETRIES ]; do
    /etc/init.d/$RCLONE_SERVICE stop >> $LOG_FILE 2>&1
    sleep $RETRY_DELAY
    /etc/init.d/$RCLONE_SERVICE start >> $LOG_FILE 2>&1
    sleep 5 # 等待挂载完成
    if mount | grep -q "$MOUNT_DIR"; then
      log "挂载恢复成功(第 $attempt 次重试)"
      rm -f $LOCK_FILE
      exit 0
    fi
    ((attempt++))
  done
  log "错误:经过 $MAX_RETRIES 次重试仍无法恢复挂载!"
  # 可选:发送报警邮件或通知
else
  log "挂载点正常,无需操作。"
fi

清理锁文件

rm -f $LOCK_FILE
exit 0



设置脚本权限
sudo chmod +x /usr/local/bin/check_rclone_mount.sh
sudo touch /var/log/rclone_monitor.log
sudo chmod 644 /var/log/rclone_monitor.log

添加定时任务
sudo crontab -e

监控 Rclone 挂载状态

          • /usr/local/bin/check_rclone_mount.sh >/dev/null 2>&1