在我的备份程序 (btrbk) 将其备份发送到我的服务器之前,我需要打开 VPN 连接。通过调用手动打开 VPN 连接效果非常好
openvpn --config VPNConfig.ovpn
我现在创建了一个 systemd 服务(每天由 systemd 时间触发),该服务应该启动备份。作为先决条件,它应该连接到 VPN,因此有一个
ExecStartPre=openvpn --config VPNConfig.ovpn
服务文件中的行。然而不幸的是,这个 openvpn 调用是阻塞的,因此也阻塞了实际备份过程的执行。
解决该问题的最佳方法是什么?
提前致谢 :)
答案1
ExecStartPre=
您应该为 OpenVPN 连接创建一个单独的服务,而不是使用,指定它应该启动Before=
您的备份服务,并根据您的需要对其进行依赖:
如果您希望启动 VPN 连接以进行备份并在备份完成后停止,您可以声明 VPN 服务是PartOf=
您的备份服务。
如果备份完成后 VPN 可以/应该保持运行,您可以指定 VPN 服务作为RequiredBy=
备份服务。
如果您的备份 VPN 解决方案稍后需要更改,您只需重写或替换 VPN 服务单元,而无需触及实际的备份单元或其计时器。
然后,您将省略 VPN 服务中的公共项WantedBy=multi-user.target
,因此启动它的唯一方法是通过依赖项或通过显式systemctl start
命令。
套用 Aperture Science 的广告词,现在你正在考虑单位。