ExecStop
有没有办法强制 systemd为其认为无法启动的单元运行命令?
我在 Debian 10 系统上运行,带有 buster-backportswireguard 软件包和wireguard 的默认 systemd 单元(摘录如下)。
在测试部署时,隧道是使用 systemd 启动的,但在 Postup 中出现错误,导致在我的情况下创建隧道,但退出代码使 systemd 导致隧道失败。清楚wg show
地显示隧道确实已创建,只是没有正确添加所有路由/规则。
更正 PostUp 后,我想要一个,但出现错误。查看它显示的输出。 Systemd 的表现就好像隧道从一开始就从未启动过一样。我也尝试过运行,但 systemd 没有执行任何操作,因为它似乎认为该单元无法启动并且没有什么可以停止?systemctl restart [email protected]
systemctl restart [email protected]
wg-quick: 'wg0' already exists
systemctl stop [email protected]
我知道我可以手动执行 a 操作,/usr/bin/wg-quick down wg0
让系统达到让 systemd 满意的状态,但是有什么方法可以让 systemd 相信它对服务的状态感到困惑,并且无论如何它都应该运行该死的 ExecStop 命令它认为国家是什么?当我说停止时,我希望 systemd 运行停止 ExecStop!如果有一些强制选项我可以通过或者有帮助的东西,但我没有在文档中看到它。
cat /lib/systemd/system/[email protected]
[Unit]
Description=WireGuard via wg-quick(8) for %I
...
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/wg-quick up %i
ExecStop=/usr/bin/wg-quick down %i
Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
...