如何让我的 systemd 服务等待网络接口?

如何让我的 systemd 服务等待网络接口?

我有一个 upstart 脚本,正在将其转换为 systemd。要启动此服务,需要有特定的网络接口可用。

这是我在 upstart 脚本中使用的内容:

start on (local-filesystems and net-device-added INTERFACE=tun0)

systemd 的对应内容是什么?

答案1

https://unix.stackexchange.com/questions/257888/systemd-wait-for-network-interface-to-be-up-before-running-service

您应该能够获得 upstart 脚本中稍微损坏的版本,如下所示:

Wants=sys-devices-virtual-net-tun0.device
After=sys-devices-virtual-net-tun0.device

systemd 应该生成tun0“设备”文件。唯一的问题是,如果tun0openvpn 没有足够快地创建设备,您的服务启动将尝试“启动”,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

相关内容