首页 > 解决方案 > Bash脚本在一段时间内有效,但在直到?

问题描述

这很简单。我将其作为 systemctl 运行。

#!/bin/bash


until ping -c1 $1 www.google.com &>/dev/null
        do protonvpn c -f
done

我的 systemctl 是:

### BEGIN INIT INFO
# Provides:          protonvpn
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: autostartvpn
### END INIT INFO

[Unit]
After=remote-fs.target

[Service]
ExecStart=/dir/startupscript

[Install]
WantedBy=default.target

当我作为 systemctl 执行它时它不起作用(上面的脚本),并且由于未知原因重新启动后它通常停止工作。

我想在protonvpn c -f获得互联网连接后立即在启动时运行此命令,并且我希望它循环直到找到连接(然后 kill-switch 控制应用程序,并且一切都可以无限期地工作)。

你能帮我让它工作吗?

标签: bash

解决方案


如果你想在有一个活动的网络连接后运行服务,你可以在你的 Systemd 服务文件上使用它:

After=network-online.target

我认为这会用一块石头杀死两只鸟,因为这种行为意味着您不再需要在脚本中添加任何类型的检查以确保它在建立网络连接后运行。


推荐阅读