使 systemd 仅重新加载单个 openvpn 进程而不是整个组

使 systemd 仅重新加载单个 openvpn 进程而不是整个组

我在我的服务器上使用 debian stable 运行多个 openvpn 实例;以及一些客户端作为服务器实例。现在,当其中一个实例失败时,systemd 似乎会终止并重新启动整个进程组:

5 月 27 日 12:09:44 tritone systemd[1]: openvpn@client_uk.service: 主进程退出,code=exited,status=1/FAILURE
5 月 27 日 12:09:44 tritone systemd[1]:单位 openvpn@client_uk.service 进入失败状态。
5 月 27 日 12:10:01 tritone systemd[1]:正在停止与 client_rhode 的 OpenVPN 连接...
5 月 27 日 12:10:01 tritone systemd[1]:开始 OpenVPN 连接到 client_uk...
5 月 27 日 12:10:01 tritone systemd[1]:正在停止与 client_ukraine 的 OpenVPN 连接...
5 月 27 日 12:10:01 tritone systemd[1]:正在停止 OpenVPN 连接到 server_udp...
5 月 27 日 12:10:01 tritone systemd[1]:停止 OpenVPN 服务...
5 月 27 日 12:10:01 tritone systemd[1]:启动 OpenVPN 服务...
5月27日12:10:01 tritone systemd[1]:启动OpenVPN服务。
...

恕我直言,这既是不受欢迎的,也是多余的。重新启动单个失败的服务就足够了。这是来自以下的 systemd 配置/etc/systemd/system/multi-user.target.wants/openvpn.service

[单元]
描述=OpenVPN 服务
之后=网络.目标

[服务]
类型=一次性
退出后继续保留=是
ExecStart=/bin/true
ExecReload=/bin/true
工作目录=/etc/openvpn

[安装]
WantedBy=多用户.target

我已经看到配置,其中 ExecReload 已设置为kill -HUP $MAINPID,而且我的服务器似乎也这样做,正如 systemctl status 所说:

  Process: 5893 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)

那么我不明白的是,如果 systemd 配置 ExecReload 实际上另有说明,那么这个kill命令在哪里定义的?另外,即使Type=oneshot定义了服务,为什么还要重新启动?我正在查看正确的文件吗?

重启命令应该是什么样的? Kill 不起作用,因为该进程应该已经死了。

编辑:我发现/lib/systemd/system-generators/openvpn-generator,尽管如此,现在仍不清楚它们何时运行或执行。生成器似乎失败了,因为实际上没有创建任何链接,可能是由于 selinux 限制。不过,这个文件似乎是用于 init 的。所以我想知道为什么要创建虚拟文件?/lib/systemd/system/[email protected]/etc/systemd/system/multi-user.target.wants/openvpn.service

答案1

如果你使用 CONFIGNAME 作为你的配置文件名,.conf你可以尝试

systemctl restart [email protected]

相关内容