bash - 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 控制应用程序,并且一切都可以无限期地工作)。
你能帮我让它工作吗?
解决方案
如果你想在有一个活动的网络连接后运行服务,你可以在你的 Systemd 服务文件上使用它:
After=network-online.target
我认为这会用一块石头杀死两只鸟,因为这种行为意味着您不再需要在脚本中添加任何类型的检查以确保它在建立网络连接后运行。
推荐阅读
- node.js - Next.js 的 API 路由不发送响应
- android - Facebook 受众网络一直等待广告请求
- c++ - C ++中的短无符号整数
- asp.net-core - Chrome 手机颜色不匹配
- php - 根据状态隐藏记录
- vba - 允许从一个表中删除数据以添加到另一个表
- sql - 带有 LEFT JOIN、GROUP BY 和 HAVING 的 SQL UPDATE 语句?
- flutter - 尝试在 Flutter FutureBuilder 中构建 ListView 时出错
- swift - 如何在 SwiftUI 中交换 TabView 和 BottomToolbar
- sql - 将时间戳转换为 varchar