据我从systemd的文档中可以看出,Wants=并WantedBy=执行相同的功能,除了前者放在依赖单元文件中,反之亦然。(那个,并WantedBy=创建unit.type.wants目录并用符号链接填充它。)
该
WantedBy=指令...允许您以与Wants=该[Unit]部分中的指令类似的方式指定依赖关系。不同之处在于该指令包含在辅助单元中,允许列出的主要单元保持相对清洁。
它真的只是保持单元文件“干净”吗?使用这两个指令的最佳实践是什么?也就是说,如果服务阿尔法“想”的服务测试版,我什么时候应该用Wants=beta.service在alpha.service和什么时候应该更喜欢WantedBy=alpha.service在beta.service?
基于联机帮助页:
--删除期间,--del
请求在传输发生时逐步完成接收方的文件删除。每个目录的删除扫描是在检查每个目录的更新之前完成的,因此它的行为类似于更高效的 --delete-before,包括在更新任何每个目录的过滤器文件之前进行删除。该选项首先在 rsync 2.6.4 版本中添加。有关文件删除的更多详细信息,请参阅 --delete (隐含的)。
还有--delete-before和--delete-after。我不太明白这些和 之间的区别--delete。--delete如果不是之前、期间或之后,什么时候删除文件?
文档还说:
因此,当连接两端至少为 3.0.0 时,指定 --delete 时的默认删除模式现在为 --delete-during(使用 --del 或 --delete-during 来请求这种改进的删除模式)明确)。
我想这意味着--del旨在取代--delete。有什么理由使用--deleteover--del吗?使用--del小于 3.0.0 的连接会导致问题吗?(我假设这是 rsync 版本)。
wg0假设我有一个名为的wireguard 网络10.0.0.1/24。我使用 systemd 在启动时启动它:
# systemctl enable wg-quick@wg0
Run Code Online (Sandbox Code Playgroud)
我希望 sshd 仅侦听wireguard 地址 ,10.0.0.1而不是0.0.0.0。所以我设置ListenAddress了/etc/ssh/sshd_config:
ListenAddress 10.0.0.1
#ListenAddress ::
AddressFamily inet
Run Code Online (Sandbox Code Playgroud)
注意:我设置了地址族,因为我在这里仅使用 IPv4 而不是 IPv6。我认为如果不设置,ssh将继续监听::IPv6。
如果我保存配置并重新启动 sshd,效果很好。但是服务器重新启动后,尽管在 systemd 中启用了 ssh,但仍无法启动。系统日志输出告诉我们原因:
sshd[xxx]: error: Bind to port 22 on 10.0.0.1 failed: Cannot assign requested address.
Run Code Online (Sandbox Code Playgroud)
显然,我们有一个竞争条件,即 sshd 在 Wireguard 接口准备好之前尝试(但失败)启动。
显而易见的解决方案是编辑/etc/systemd/system/sshd.service并添加wg-quick@wg0为依赖项。After=然而, 、Wants=、 或的组合并Requires=不能解决问题。似乎wg-quick@wg0报告它已经完成,尽管网络接口实际上还没有准备好。