我想使用作为 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 脚本来启动该过程。要创建计划任务,请运行任务计划程序,然后:
- 在任务库中创建一个名为“WSL”的新文件夹(可选)
- 在该文件夹中,操作 -> 创建基本任务
- 姓名:类似于“WSL crond”
- 扳机:当我登录时
- 行动:启动程序
- 程序/脚本:
wsl
- 添加参数:
-u root -e sh -c "service cron status || service cron start"
- 结束
您可以尝试在 PowerShell 中使用此命令行来提前进行测试
wsl -u root -e sh -c "service cron status || service cron start"
。它使用 root 用户启动 WSL,以便您service
无需密码即可运行该命令。然后,它会检查该cron
服务当前是否正在运行,如果没有,则启动它。请注意,这假设您正在运行 Ubuntu 或包含 crond 的 init 脚本的发行版。一些更“纯粹”基于 Systemd 的发行版(如 Debian)不包含这些脚本。
这个答案已经够长了,所以我不会详细介绍如何添加 cron 作业,但如果你需要帮助,请参阅这个问题。