Rsync 守护进程用于在 WSL 中镜像本地文件

Rsync 守护进程用于在 WSL 中镜像本地文件

我想使用作为 WSL 服务启动的 rsync 守护程序C:\path\to\docs进行镜像E:\path\to\mirror。驱动器 C 和 E 都在同一台计算机上。我理解:

rsync -rtvuc -delete source_folder/ dest_folder/

... 是镜像文件夹的命令。但是我不知道如何编写一个rsyncd.conf命令来作为后台系统服务/守护进程来执行此命令。

至于 WSL 部分,我做了一些研究,认为我只需要将 .bat 文件放在启动文件夹中。对吗?

谢谢您的任何意见!

答案1

我已经有几年没用过了rsync,而且更久没用过了rsyncd,所以如果我有什么不对的地方欢迎指正,但在发布这篇文章之前,我至少做了一些研究来复习一下:

  • 由于您只是在本地到本地镜像,因此实际上不需要守护进程。当您需要在另一台您控制的主机上运行守护进程时,它很有用,并且您不需要通过 SSH 运行 rsync-to-rsync 的安全性/开销。请参阅一些这些答案,尽管我不确定我是否会认为其中任何一个具有权威性。

  • 您似乎认为可以rsynd通过配置来持续保持两个目录同步rsyncd.conf。不幸的是,它的工作方式并非如此。首先,rsyncd.conf它只允许您配置远程服务器上您希望能够通过本地访问的路径rsync,并为这些目录指定选项/权限。

  • 这个问题了解在文件更改时如何自动保持两个目录同步的详细信息。但是,还请注意,执行此操作的典型方法是每隔一段时间运行一个 cron 作业来启动同步,而不是“监视”文件更改。

  • 另请注意,在 WSL2 下,“监视”更新(称为机制)在 Windows 驱动器(又名、 )inotify上不起作用。它仅适用于 WSL 中的 ext4 根文件系统。WSL1 没有此限制。请参阅/mnt/c/mnt/d这个问题我的回答提供了更多详细信息。

  • 因此,如果您采用“推荐”方法,将问题中的命令行设置为 cron 作业,每小时运行一次,您仍然需要某种方式来crond运行。这又回到了您关于如何让服务在启动时运行的问题的一部分。

    为此,你可以使用.bat启动文件夹中的文件,但我更喜欢使用 Windows 任务计划程序来安排在登录时运行的任务。请注意,它需要登录而不是启动,因为 WSL 似乎要求拥有用户登录到他们的 Windows 帐户。解决这个问题似乎是可能的(有稳定性警告),但需要一些 PowerShell 脚本来启动该过程。

    要创建计划任务,请运行任务计划程序,然后:

    1. 在任务库中创建一个名为“WSL”的新文件夹(可选)
    2. 在该文件夹中,操作 -> 创建基本任务
    3. 姓名:类似于“WSL crond”
    4. 扳机:当我登录时
    5. 行动:启动程序
    6. 程序/脚本: wsl
    7. 添加参数: -u root -e sh -c "service cron status || service cron start"
    8. 结束

    您可以尝试在 PowerShell 中使用此命令行来提前进行测试wsl -u root -e sh -c "service cron status || service cron start"。它使用 root 用户启动 WSL,以便您service无需密码即可运行该命令。然后,它会检查该cron服务当前是否正在运行,如果没有,则启动它。

    请注意,这假设您正在运行 Ubuntu 或包含 crond 的 init 脚本的发行版。一些更“纯粹”基于 Systemd 的发行版(如 Debian)不包含这些脚本。

这个答案已经够长了,所以我不会详细介绍如何添加 cron 作业,但如果你需要帮助,请参阅这个问题

相关内容