在本文中，我将分享如何在 Debian Linux 服务器上通过命令行方式配置 OneDrive 同步工具，实现：同步 OneDrive 上某个文件夹自动下载（不上传）实时监控同步后台运行随开机自动启动适用于无桌面的服务器环境，例如通过 SSH 登录的 VPS。✅ 安装 OneDrive 同步客户端（abraunegg 版）首先安装依赖并从源码编译：sudo apt update sudo apt install -y ldc pkg-config git curl build-essential libcurl4-openssl-dev libsqlite3-dev libdbus-1-dev git clone https://github.com/abraunegg/onedrive.git cd onedrive ./configure make sudo make install✅ 授权 OneDrive 登录（包含多个账户）首次运行会提示你复制一个授权链接：onedrive授权多个账户mkdir ~/.config/名称 onedrive --confdir=~/.config/名称复制链接到本地浏览器访问，登录并授权后，将跳转到一个以 https://login.microsoftonline.com/common/oauth2/nativeclient?... 开头的地址。把这个完整链接复制回 SSH 终端，回车完成授权。✅ 设置同步目录配置（可选）你可以指定本地同步目录和忽略某些临时文件：编辑配置文件：mkdir -p ~/.config/onedrive nano ~/.config/onedrive/config内容示例：# 设置本地同步目录（可选） sync_dir = "/root/ca" # 忽略临时文件（可选） skip_file = "~*|.~*|*.tmp|*.swp|*.partial" # 这里根据你的cpu线程自行修改 threads = "1" ❗️注意：不能在 config 文件中使用 single_directory 参数，它只能通过命令行传入。✅ 只同步 OneDrive 某个文件夹使用 --single-directory 参数：onedrive --monitor --single-directory "qbit" --download-only只会同步 OneDrive 上的 qbit（是你同步的） 文件夹不会上传本地文件改动（只下载）✅ 后台运行 OneDrive 实时同步使用 nohup 方式运行：nohup onedrive --monitor --single-directory "qbit" --download-only > /var/log/onedrive.log 2>&1 &✅ 设置 systemd 用户服务实现开机自启步骤 1：创建 systemd 服务文件（有两个自行选择，推荐使用第一个，第二个是经常强制关闭的时候使用会主要目的是为了重建数据库）mkdir -p ~/.config/systemd/user nano ~/.config/systemd/user/onedrive.service内容如下（常用）：[Unit] Description=OneDrive Sync Service (Single Directory) After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/onedrive --monitor --single-directory "qbit" Restart=always RestartSec=10 Environment=XDG_CONFIG_HOME=/root/.config StandardOutput=append:/root/onedrive.log StandardError=append:/root/onedrive.log [Install] WantedBy=default.target内容如下（如果经常强制终止的建议用这个）：[Unit] Description=OneDrive Sync Service (Single Directory) After=network-online.target Wants=network-online.target [Service] ExecStart=/bin/bash -c '/usr/local/bin/onedrive --single-directory "qbit" --resync --sync || true; exec /usr/local/bin/onedrive --monitor --single-directory "New"' Restart=always RestartSec=10 Environment=XDG_CONFIG_HOME=/root/.config StandardOutput=append:/root/onedrive.log StandardError=append:/root/onedrive.log [Install] WantedBy=default.target多帐户的systemctl配置如下[Unit] Description=OneDrive Sync Service for Files After=network-online.target Wants=network-online.target [Service] ExecStart=/bin/bash -c '/usr/local/bin/onedrive --confdir="/root/.config/名称" --single-directory "qbit" --resync --sync || true; exec /usr/local/bin/onedrive --monitor --confdir="/root/.config/名称" --single-directory "qbit"' Restart=always RestartSec=10 Environment=XDG_CONFIG_HOME=/root/.config StandardOutput=append:/root/onedrive-名称.log StandardError=append:/root/onedrive-名称.log [Install] WantedBy=default.target注意：请根据 which onedrive 调整 ExecStart 路径尝试执行一次带 --resync --sync 的同步。如果成功或失败 (|| true)，继续。如果只需要下载，那就在/usr/local/bin/onedrive --monitor --single-directory "qbit"后面加上 --download-only上传同理题外话如果你觉得日志可能会越写越多，可以设置一个定时，让他每隔多久运行一次清理日志。创建脚本nano /root/clear_onedrive_log.sh#!/bin/bash # 清空 OneDrive 日志 truncate -s 0 /root/onedrive.log 给脚本加执行权限chmod +x /root/clear_onedrive_log.sh设置定时任务（每 10 天执行一次）编辑 crontab：crontab -e添加一行（每 10 天的 0 点执行一次）：0 0 */10 * * /root/clear_onedrive_log.sh解释：0 0 /10 * → 每个月的第 1、11、21…天 0:00 执行脚本执行后会清空 /root/onedrive.log步骤 2：启用并启动服务loginctl enable-linger $(whoami) systemctl --user daemon-reexec systemctl --user daemon-reload systemctl --user enable onedrive.service systemctl --user start onedrive.service检查运行状态：systemctl --user status onedrive.service方便网页查看同步进度，运行一下这个命令bash -c "$(curl -fsSL https://sh.digac.icu/shell/onedrivelog.sh)" ✅ 升级 cURL（可选）如果出现如下警告：WARNING: Your cURL/libcurl version (7.88.1) has known HTTP/2 bugs ...echo "deb http://deb.debian.org/debian bookworm-backports main" \ | sudo tee /etc/apt/sources.list.d/backports.listapt-get update apt-get -t bookworm-backports install curl说明你的系统使用了存在兼容性问题的旧版 curl，但客户端已自动回退使用 HTTP/1.1。为最佳体验，你可以手动升级 curl 到 7.92+，或者忽略该提示继续使用。