学而时习之 - 2025年5月
type: channel
link: https://cquilm.com/2025/05/
description: 神神叨叨的一个网站
items: Linux OneDrive同步工具

Linux OneDrive同步工具
type: item
date: 2025-05-07T12:21:00+08:00
description: 在本文中，我将分享如何在 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…