自动启动 Syncthing

按操作系统选择配置:Windows、macOS 或 Linux。

Windows

目前没有 Windows 官方安装程序,不过有几种简单的解决方案。

系统内置方案:通过任务计划程序,在用户登录时或系统启动时运行;通过启动文件夹,在用户登录时运行。其他方案:使用第三方工具安装、运行;作为服务运行,不依赖用户登录。

使用任务计划程序,在用户登录或系统启动时运行

任务计划程序是 Windows 内置的管理工具,可以在用户登录时或系统启动时自动启动 Syncthing。两种情况下,Syncthing 都会启动并在后台运行,不显示窗口。技术信息见 Task Scheduler 文档。

  1. 从“开始菜单 > Windows 管理工具”打开“任务计划程序”,或按 Win+R,运行 taskschd.msc。
    Windows Task Scheduler Create Task Screenshot
    Syncthing 官方文档界面示例:Windows Task Scheduler Create Task Screenshot
  2. 在“操作”侧栏选择“创建任务…”。
  3. 在“常规”选项卡中,给任务命名,例如“Syncthing”,并选择“不管用户是否登录都要运行”。
    Windows Task Scheduler General Screenshot
    Syncthing 官方文档界面示例:Windows Task Scheduler General Screenshot
  4. 在“触发器”选项卡中,选择下列一种启动方式。

用户登录时运行: 如果只打算在登录 Windows 用户账户后使用 Syncthing,选择这一方式。点击“新建…”,将“开始任务”设为“登录时”,选择“特定用户”,然后点击“确定”。

Windows Task Scheduler Triggers Logon Screenshot
Syncthing 官方文档界面示例:Windows Task Scheduler Triggers Logon Screenshot

系统启动时运行: 如果希望 Windows 一启动,Syncthing 就在后台运行,即使尚未登录用户账户,也选择这一方式。如果 Syncthing 文件夹位于受 BitLocker 保护的非系统分区,请不要采用这一方式:用户登录前无法访问这些文件夹。点击“新建…”,将“开始任务”设为“启动时”,然后点击“确定”。

Windows Task Scheduler Triggers Startup Screenshot
Syncthing 官方文档界面示例:Windows Task Scheduler Triggers Startup Screenshot
  1. 在“操作”选项卡中,点击“新建…”。在“程序或脚本”中填写 syncthing.exe 的路径,例如 C:\syncthing\syncthing.exe;在“添加参数(可选)”中填写 --no-console --no-browser,然后点击“确定”。
    Windows Task Scheduler Actions Screenshot
    Syncthing 官方文档界面示例:Windows Task Scheduler Actions Screenshot
  2. 在“设置”选项卡中,取消勾选“如果任务运行时间超过以下时间,停止任务”。点击“确定”,输入该用户的密码。
    Windows Task Scheduler Settings Screenshot
    Syncthing 官方文档界面示例:Windows Task Scheduler Settings Screenshot

注意: 至少交互式启动一次 Syncthing,也就是直接启动,而不是依靠任务计划程序。这样才能触发 Windows 防火墙弹窗,请求你允许 Syncthing 访问网络。例如,要让 Syncthing 在当前网络中建立直接连接,或者远程访问 Web GUI,就需要完成这一操作。

任务计划程序中的附加配置

下面的设置是可选的,不是正常运行 Syncthing 的必要条件,但可以提供额外功能。根据需要选择使用。

在“条件”选项卡中:

Windows Task Scheduler Additional Conditions Screenshot
Syncthing 官方文档界面示例:Windows Task Scheduler Additional Conditions Screenshot
  • 取消勾选“如果计算机改用电池电源,停止”。仅取消“只有在计算机使用交流电源时才启动此任务”,并不会禁用这个选项。即使它显示为灰色,仍然有效,必须单独取消勾选。
  • 取消勾选“只有在计算机使用交流电源时才启动此任务”。
  • 勾选“只有在以下网络连接可用时才启动”,并将其设为“网络”。在笔记本电脑上,如果只希望通过有线互联网连接而非 Wi-Fi 启动 Syncthing,可使用这一选项。注意:启动之后,即使连接发生变化或不可用,Syncthing 也不会停止运行。

在“操作”选项卡中,选择先前创建的操作并点击“编辑…”。在“起始于(可选)”中填写 syncthing.exe 所在的父文件夹路径,然后点击“确定”。这样便能在 Syncthing 中使用相对于该文件夹的路径。

Windows Task Scheduler Additional Actions Screenshot
Syncthing 官方文档界面示例:Windows Task Scheduler Additional Actions Screenshot

警告: 由于技术限制,在任务计划程序中结束任务,只会终止 Syncthing 的监控进程。要真正退出 Syncthing,请打开 Web GUI,在“操作”下拉菜单中点击“关闭”。

使用启动文件夹,在用户登录时运行

要在用户登录时启动 Syncthing,同时不显示控制台窗口、也不打开浏览器,操作很简单。

  1. 在 Windows 文件资源管理器的地址栏中粘贴 %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup,按回车。较新 Windows 版本也可以按 Win+R,运行 shell:startup。
    Windows Startup Folder Address Bar Screenshot
    Syncthing 官方文档界面示例:Windows Startup Folder Address Bar Screenshot
  2. 右键点击文件夹空白处,选择“新建 > 快捷方式”。
    Windows Startup Folder New Shortcut Screenshot
    Syncthing 官方文档界面示例:Windows Startup Folder New Shortcut Screenshot
  3. 在“请输入对象的位置”中填写 syncthing.exe 的路径,后接 --no-console --no-browser,例如 C:\syncthing\syncthing.exe --no-console --no-browser。
    Windows Startup Folder Create Shortcut Screenshot
    Syncthing 官方文档界面示例:Windows Startup Folder Create Shortcut Screenshot
  4. 点击“下一步”,再点击“完成”。

下一次登录 Windows 用户账户时,Syncthing 就会自动启动,不会弹出控制台或浏览器窗口。你仍然可以在浏览器中打开 http://localhost:8384,访问管理界面。

使用第三方工具安装、运行

有一些第三方工具旨在让 Syncthing 更容易安装和运行。它们通常提供安装程序、自动启动选项,以及更完善的使用体验,例如像普通 Windows 应用那样运行,而不是要求你通过浏览器与 Syncthing 交互。

另见官方的 Windows GUI 包装工具、跨平台 GUI 包装工具和Windows 软件包列表。

作为服务运行,不依赖用户登录

警告: 这种方式有重要的安全注意事项。如果没有保护好 Syncthing 的 GUI 和 REST API,任何以任何权限运行的进程,都可以通过连接 Syncthing,读写文件系统中的任何文件。因此,必须设置 GUI 密码,或者以非特权用户身份运行 Syncthing。

前面启动文件夹的配置只会在用户登录后启动 Syncthing。这不适合重启后可能长时间无人登录的服务器。这时,最好创建一个在 Windows 启动时运行的服务。可以使用 NSSM,即“Non-Sucking Service Manager”来实现。

对于几乎所有终端用户场景,登录时启动都是首选方案。作为服务运行,主要适用于由了解其安全影响的系统管理员管理、通常没有显示器的服务器。

  1. 下载并解压 NSSM,放在可以长期保留的文件夹中。NSSM 可执行程序既负责管理,也负责作为 Windows 服务运行,因此要放在合适的位置。
  2. 在管理员命令提示符中,切换到 NSSM 文件夹,运行 nssm.exe install <syncthing service name>。
  3. 在 Application 选项卡中,将 Path 设为 syncthing.exe 的路径;Arguments 填写 --no-restart --no-browser --home="<path to your Syncthing folder>"。日志在后面的步骤中设置,这里使用 --logfile 不会生效。
    Windows NSSM Configuration Screenshot
    Syncthing 官方文档界面示例:Windows NSSM Configuration Screenshot
  4. 在 Details 选项卡中,可选地把 Startup type 改为 Automatic (Delayed Start),延迟系统首次启动时 Syncthing 的启动时间,从而改善开机速度。
  5. 在 Log On 选项卡中,填写用于运行 Syncthing 的账户。该用户必须能够完全访问 Syncthing 可执行文件及其父文件夹、配置文件/数据库文件夹,以及同步文件夹。可以保留 Local System,但这有安全风险。使用你的 Windows 用户账户可以降低风险;理想方案是创建一个具有最小权限的专用账户。
  6. 在 Process 选项卡中,可选地将优先级改为 Low,在系统繁忙时改善响应,代价是同步时间可能稍长。要启用日志,还可勾选“Console window”。
  7. 在 Shutdown 选项卡中,为确保 Syncthing 正常关闭,勾选所有复选框,并将所有超时设为 10000ms。
  8. 在 Exit Actions 选项卡中,将 Restart Action 设为 Stop service(oneshot 模式)。稍后会针对退出、重启和升级设置具体处理方式。
  9. 在 I/O 选项卡中,如需日志,将 Output (stdout) 设为期望的日志文件。Error 字段会自动使用同一个文件。
  10. 在 File Rotation 选项卡中,可按个人需要设置日志轮转。
  11. 点击 Install Service 按钮。
  12. 为使 Windows 服务管理器正确处理 Syncthing 的退出、重启与升级,在同一个命令提示符中执行以下命令:
nssm set syncthing AppExit Default Exit
nssm set syncthing AppExit 0 Exit
nssm set syncthing AppExit 3 Restart
nssm set syncthing AppExit 4 Restart
  1. 在命令提示符中执行 sc start syncthing,启动服务。
  2. 连接 Syncthing UI,启用 HTTPS,并设置安全的用户名和密码。

macOS

使用 Homebrew

  1. 执行 brew install syncthing。
  2. 按照 brew 显示的信息,使用 launchctl 设置 Syncthing 自动启动。

不使用 Homebrew

下载并解压 Mac 版 Syncthing。

  1. 将 syncthing 二进制文件——也就是启动 Syncthing 时会打开的文件——复制到主目录下名为 bin 的目录,即 /Users/<username>/bin。如果没有 bin,先创建它。
  2. 打开 /etc/macos-launchd 中的 syncthing.plist。将其中四处 /Users/USERNAME 替换为你的真实主目录位置。
  3. 将 syncthing.plist 复制到 ~/Library/LaunchAgents。如果找不到这个位置,在 Finder 中选择“前往 > 前往文件夹…”,填写 ~/Library/LaunchAgents。原文说明,复制到这个位置通常会要求管理员密码。
  4. 注销并重新登录。如果不想注销,可以在终端执行 launchctl load ~/Library/LaunchAgents/syncthing.plist。

注意:你可能希望在 Web GUI 设置中关闭“Start Browser”,避免每次登录都打开浏览器。之后可在 Safari 中输入默认地址 127.0.0.1:8384,访问 GUI。

Linux

使用桌面环境(KDE、Gnome、Xfce、Cinnamon 等)

有两种方式,让 Syncthing 在登录桌面环境(DE)时启动。

使用桌面环境工具:搜索并打开与自动启动或启动应用有关的工具;添加一个新的自动启动应用,搜索并选择“Start Syncthing”。

如果找不到“Start Syncthing”,或者更喜欢手动操作:

  1. 找到 syncthing-start.desktop。从 GitHub 下载的软件包中,它位于 etc/linux-desktop/;通过软件包管理器安装时,可能位于 /usr/share/applications/;也可以从官方仓库获取。
  2. 将它复制到 ~/.config/autostart/。

与应用菜单等用途的 .desktop 文件有关的更多信息,也见上面的仓库目录。

使用 Supervisord

进入 /etc/supervisor/conf.d/,创建 syncthing.conf,填写以下内容。务必把 <USERNAME> 替换为有效用户名。

文件:/etc/supervisor/conf.d/syncthing.conf

[program:syncthing]
autorestart = True
directory = /home/<USERNAME>/
user = <USERNAME>
command = /usr/bin/syncthing --no-browser
environment = STNORESTART="1", HOME="/home/<USERNAME>"

重新加载 Supervisord:

supervisorctl reload

随后启动 Syncthing:

supervisorctl start syncthing

检查是否正常运行:

supervisorctl status syncthing

出现问题时,检查日志:

supervisorctl tail syncthing

使用 systemd

systemd 是一套系统管理守护进程、库和工具,为 Linux 提供集中式管理、配置平台。它还可以为每个用户提供独立的 systemd 实例,使用户能够管理自己的服务,启动、停止、启用、禁用自己的单元。

Syncthing 提供 systemd 服务文件。它们位于下载压缩包的 etc/linux-systemd 目录中;通过 apt.syncthing.net 安装时,会直接放到系统中的适当位置。

主要有两种选择:系统服务或用户服务。

  • 系统服务: 即使 Syncthing 用户没有活动会话,也能在开机时运行。因为无人登录时仍会保持运行,所以适用于服务器。
  • 用户服务: 用户登录系统后才启动,例如通过图形登录界面或 SSH 登录。因此,适用于多人使用的桌面电脑,可以避免不必要地运行 Syncthing 实例。

官方 Debian/Ubuntu Syncthing 软件源和一些发行版(包括 Arch Linux)会随 Syncthing 软件包一起提供服务文件。如果发行版已安装这些文件,下面系统服务和用户服务的步骤2均可跳过。不确定时,可以先跳过;只有启用服务失败,才回到步骤2。

配置系统服务

  1. 创建运行服务的用户,或者选择一个已有用户。
  2. 如果发行版未安装服务文件,从官方仓库系统服务目录将 syncthing@.service 复制到系统实例的加载路径。
  3. 启用并启动服务。把 @ 后的 myuser 替换为实际的 Syncthing 用户:
systemctl enable syncthing@myuser.service
systemctl start syncthing@myuser.service

配置用户服务

  1. 创建运行服务的用户,或者选择已有用户。通常就是你自己的用户账户。
  2. 如果发行版未安装服务文件,从官方仓库用户服务目录将 syncthing.service 复制到用户实例的加载路径。不使用 root 权限时,可以放在主目录中的 ~/.config/systemd/user/。
  3. 启用并启动服务:
systemctl --user enable syncthing.service
systemctl --user start syncthing.service
  1. 如果在 Debian/Ubuntu 上使用 eCryptfs 加密主目录,需要按照 Ubuntu bug 1734290 所述进行修改。否则用户服务无法启动,因为默认情况下,systemd 会在主目录解密之前检查用户服务。

如果不使用系统服务,也可以通过 systemd 的 lingering 功能,在开机时而非登录时自动启动用户服务。它会在开机时激活启用了 linger 的用户的全部已启用服务:

sudo loginctl enable-linger myuser
systemctl --user enable syncthing.service

更多信息见 loginctl 的 enable-linger 命令,它可为指定用户启用这一功能。

检查服务状态

用 status 子命令检查 Syncthing 是否正常运行。系统服务:

systemctl status syncthing@myuser.service

用户服务:

systemctl --user status syncthing.service

使用日志

systemd 将日志记录到 journal 中,便于查看 Syncthing 的日志消息。下面两例中的 -e 会让分页查看器跳到末尾,显示最新日志。

系统服务:

journalctl -e -u syncthing@myuser.service

用户服务:

journalctl -e --user-unit=syncthing.service

权限

如果在 Syncthing 客户端的文件夹设置中启用了“忽略权限”(Ignore Permissions),还需要在 syncthing@.service 文件的 [Service] 部分添加 UMask=0002,或者其他你希望使用的 umask 设置。

要使 syncOwnership 选项生效,可以通过 systemd 单元文件授予服务额外能力。将以下片段添加到服务文件中,提供的模板已将它作为注释列出。为使升级顺利,建议用 systemctl edit ...,将这些内容保存在覆盖配置文件中:

[Service]
AmbientCapabilities=CAP_CHOWN CAP_FOWNER

通过远程文件系统挂载的主目录

如果为一个或多个用户配置系统服务,而这些用户的主目录通过网络挂载,例如 NFS,那么开机时 Syncthing 会启动失败,除非告诉 systemd,等远程文件系统挂载完毕再启动服务。

用 systemctl edit syncthing@.service 创建覆盖配置文件,调整服务:

# Wait for NFS-mounted home directories to become available
# before starting syncthing on boot.
[Unit]
After=remote-fs.target

上述英文注释表示:等待 NFS 主目录可用后再在开机时启动 Syncthing。对于开启 linger 的用户服务,无需这样配置;它们本来就会等待远程文件系统可用(如果存在)。

调试

如果问题跟踪系统要求你带特定环境变量启动 Syncthing,通常的设置方法在 systemd 下不会生效。systemd 将每项服务隔离,服务无法访问全局环境变量。解决办法是将变量添加到服务文件中。

编辑系统服务:

systemctl edit syncthing@myuser.service

编辑用户服务:

systemctl --user edit syncthing.service

这些命令会自动创建附加配置文件,你可以在里面定义或覆盖进一步的服务参数,例如 Environment=STTRACE=model。


来源:Starting Syncthing Automatically,Syncthing Authors。文档许可声明:CC BY 4.0。本页为中文翻译,命令与配置保留原文。原文 macOS 路径、旧命令形式与权限说明均按原文保留;实际使用应核对所安装版本随附的文件位置。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容