在启动时向网络接口添加延迟

在启动时向网络接口添加延迟

我目前正在开发一个 Raspberry Pi 项目,运行 Ubuntu Mate 32 位,RPi 将在海上并通过 4G 路由器连接到互联网。通过 VPN 网络,它将数据发送到陆地上运行 HMI 的另一台计算机。 VNC 连接也是通过 VPN 连接运行的。

启动时,它会自动连接到 VPN 服务器。

我的问题是(我认为)当系统通电并且 RPi 和路由器同时启动时,RPi 首先启动并尝试通过网络接口进行连接,但失败,因为路由器尚未启动向上。

RPi 不断尝试连接,直到路由器最终启动并运行。但是,此过程会对 VPN 连接产生影响,即使两台计算机都连接到 VPN 网络,我也无法从 VPN 网络上的 RPi 接收数据。

如果我随后重新启动 RPi 并连接并运行路由器,则它工作正常并且我可以接收数据。

作为解决方案,我想为尝试连接的网络接口添加 30 秒的延迟,以便路由器有时间正常启动。

我怎样才能做到这一点?或者有人对如何解决这个问题有更好的建议吗?

答案1

在您的 systemd 服务中,您可以配置为在连接正常后启动 VPN。解决方案是更改After单元文件上的指令。例如,sshd服务位于此文件上/etc/systemd/system/multi-user.target.wants/sshd.service,并且After选项强制服务在网络后启动:

[Unit]
Description=OpenSSH Daemon
Wants=sshdgenkeys.service
After=network.target

[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

所以你必须更改AfterVPN 服务,例如vpn.service

相关内容