我有一个 upstart 脚本,正在将其转换为 systemd。要启动此服务,需要有特定的网络接口可用。
这是我在 upstart 脚本中使用的内容:
start on (local-filesystems and net-device-added INTERFACE=tun0)
systemd 的对应内容是什么?
答案1
您应该能够获得 upstart 脚本中稍微损坏的版本,如下所示:
Wants=sys-devices-virtual-net-tun0.device
After=sys-devices-virtual-net-tun0.device
systemd 应该生成tun0
“设备”文件。唯一的问题是,如果tun0
openvpn 没有足够快地创建设备,您的服务启动将尝试“启动”,sys-devices-virtual-net-tun0.device
这将导致超时失败(默认情况下,DefaultTimeoutStartSec
通常为 90 秒/etc/systemd/system.conf
)。因此,最好让某些东西依赖于 openvpn,然后明确检查设备tun0
,如果找不到则重新启动:
# Wait loosely on openvpn service
Wants=openvpnxxxx.service
After=openvpnxxx.service
# Make sure tun0 is up/active
ExecStartPre=/bin/bash -c "systemctl is-active sys-devices-virtual-net-tun0.device"
# Keep restarting till tun0 is up
Restart=on-failure