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

Mic*_*ael 7 systemd openvpn

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

5 月 27 日 12:09:44 tritone systemd[1]:openvpn@client_uk.service:主进程退出,代码=退出,状态=1/FAILURE
5 月 27 日 12:09:44 tritone systemd[1]:单元 openvpn@client_uk.service 进入失败状态。
5 月 27 日 12:10:01 tritone systemd[1]:停止 OpenVPN 连接到 client_rhode...
5 月 27 日 12:10:01 tritone systemd[1]:启动 OpenVPN 连接到 client_uk...
5 月 27 日 12:10:01 tritone systemd[1]:停止 OpenVPN 连接到 client_ukraine...
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 服务。
...

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

[单元]
说明=OpenVPN 服务
之后=网络.目标

[服务]
类型=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
工作目录=/etc/openvpn

[安装]
WantedBy=multi-user.target

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

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

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

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

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

dom*_*nix 1

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

systemctl restart openvpn@CONFIGNAME.service
Run Code Online (Sandbox Code Playgroud)