跳转到内容
shoes

热重载

自动检测配置更改。 CLI 还监视引用的出站 TLS/QUIC 客户端证书和密钥、客户端身份验证 CA 捆绑包、本地 ShadowTLS 证书/密钥以及 ACME 自定义 ca_cert 文件。成功准备后,更改 ACME 信任根会替换受影响的续订工作人员,同时保留其帐户和颁发的证书。

自动完全重新加载在最后一个相关文件系统事件后等待 **5 秒的安静。对配置、规则或仅重新加载的 PEM 依赖项的写入共享该防抖窗口。单独的证书/密钥写入被合并;无效或不完整的候选者将被拒绝,而不退出正在运行的监听器。活动且可解析的候选依赖项仍处于监视状态,因此修复或创建丢失的 PEM 文件会重试重新加载,而无需进行其他配置编辑。 Unix SIGHUP 绕过反跳; shutdown 也会立即中断它。

--no-reload 禁用自动完全重新加载手表,而不是实时服务器证书轮换或 ACME 更新。在 Unix 上,SIGHUP 仍然请求重新加载。嵌入式/FFI 实例使用相同的实时服务器证书观察程序,但没有完整的配置重新加载循环:仅重新加载 PEM 更改需要重新启动嵌入式实例。

在 Linux 上,如果目录权限阻止监视可读配置的父级,则启动将回退到直接文件监视并记录警告。就地编辑仍然可以检测到,但原子替换可能会被遗漏;替换文件时使用 SIGHUP 或授予目录读取权限。

在当前监听器继续提供服务的同时,准备好替换配置、证书和 DNS 解析器。准备失败会使当前配置继续运行。未更改的固定 TCP 监听地址在各代之间保留其套接字。新一代TCP和Unix监听器仅在激活完成后接受排队连接;在此间隔期间,连接可能会在内核积压中等待。

如果激活失败,shoes 会停止候选服务并恢复之前的配置,包括控制状态、资源限制、DNS 所有权和证书工作人员。成功的回滚使进程保持运行;如果回滚也失败,shoes 将以状态 1 退出,而不是服务部分生成。当旧监听器退出时,现有的 TCP 连接开始耗尽,最多可达 global_settings.reload_grace_secs。回滚后该截止日期仍然适用。 TUN、WireGuard、QUIC服务停止并重启;他们的现有会话不会通过回滚进行迁移或恢复。

证书源文件更改和 ACME 续订不会触发此完全重新加载。他们轮换直播,无需更换听众或关闭 QUIC 连接;请参阅证书来源。

QUIC 监听器套接字必须在替换绑定之前完成关闭。关闭端点最多可达一秒以尽力关闭交付,然后其驱动程序在本地停止,因此对等控制的计时器无法延迟重新加载。如果上一代的套接字未在五秒套接字释放防护内退出,则 shoes 会出现错误并退出,而不是宣布部分就绪的一代。

在 DNS 准备期间使用候选 QUIC 缓冲区大小,但 global_settings 准入上限仅在激活时更改。因此,HTTP/3 或 QUIC 代理链上的 DNS 引导程序需要实时上限下的空间。如果准备工作无法完成,则增加上限的重新加载可能需要重新启动。降低上限不会撤销现有的保留,包括在准备期间做出的保留;新的准入将被阻止,直到使用量充分下降。在冷启动时,准备使用初始的无限制准入上限。

在 macOS 上,编辑配置的文件路径或在通过另一个目录中的硬链接别名写入时使用 SIGHUP。此类别名写入的自动检测取决于后端。系统卷目录符号链接的解析无需观察其不可变链接。

SIGINT/SIGTERM(或 Windows 上的 Ctrl-C)停止监听器并以状态 0 退出。进程关闭不会等待 TCP 重新加载宽限期。