![使 systemd 仅重新加载单个 openvpn 进程而不是整个组](https://linux22.com/image/65778/%E4%BD%BF%20systemd%20%E4%BB%85%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%E5%8D%95%E4%B8%AA%20openvpn%20%E8%BF%9B%E7%A8%8B%E8%80%8C%E4%B8%8D%E6%98%AF%E6%95%B4%E4%B8%AA%E7%BB%84.png)
我在我的服务器上使用 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]