![一旦连接到互联网,我怎样才能触发某些事情?](https://linux22.com/image/1075496/%E4%B8%80%E6%97%A6%E8%BF%9E%E6%8E%A5%E5%88%B0%E4%BA%92%E8%81%94%E7%BD%91%EF%BC%8C%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E8%A7%A6%E5%8F%91%E6%9F%90%E4%BA%9B%E4%BA%8B%E6%83%85%EF%BC%9F.png)
我想知道如何让机器在每次连接到互联网时做一些事情?
就像我连接到互联网后检查更新一样?
谢谢
答案1
绝对没有指示器显示您是否有互联网连接。这是因为您总是连接到某种网关(路由器、调制解调器等),这些网关会建立与您的 ISP 的连接。因此,要确定您是否在线,您必须通过 ping 或建立 HTTP 连接(curl
例如使用)并检查结果来自己检查连接。但请注意:ping 响应并不意味着您可以建立 HTTP 连接。获得 HTTP 响应并不意味着您可以上网。您始终必须检查响应。
如果您知道预期的响应,则可以确保有互联网连接。例如,您可以解析以下网站http://www.whatismyip.de/使用正则表达式查找 IP 地址。如果您的正则表达式正确但找不到 IP 地址,则表示您没有互联网连接。
简短回答:编写一个脚本来检查互联网连接(如上所述)。如果成功,您将执行所需的命令并设置一个标志,表示您今天已完成(只需创建文件并检查是否存在),如果失败,您什么也不做。将该脚本设为 cronjob。
答案2
您正在寻找的脚本如下所示
[ -n "$(curl -s icanhazip.com | grep ^[0-9])" ] && firefox
- 如果您在线,“curl icanhazip.com”将返回 IP 地址
- “grep ^[0-9]”检查第一个字符是否是数字
- “[ -n "..." ] &&” 表示“如果为真,则继续执行下一个命令(在我的示例中为“firefox”)”
- 这是一个快速破解,如果 icanhazip.com 关闭或者您有 IPv6 地址,此脚本将不起作用。
为了轻松设置 cronjob 以每 x 分钟运行一次,您可以安装“gnome-schedule”。
答案3
Network-manager 公开了一个 DBus 接口,您可以使用它在连接到网络时收到通知。这通常意味着您也连接到了互联网,但我不知道 Network-Manager 是否有任何方法可以实际确认这一点。您可能希望使用 Network-Manager 在连接到网络时收到通知,然后确认您可以访问互联网,如果可以,请执行您想要的操作。
答案4
正如 dAnjou 所说,我不相信存在可以使用的触发器。
但是,要检查 Internet 连接,有一种比使用 curl 更简单的方法。按如下方式使用 fping,如果已连接则返回 0,否则返回 2。有关更多信息,请参阅 fping 手册。
fping -q example.com
(使用 example.com 是有效的,因为即使该域名保留用于测试,它也是存在的。)
将 Davidc 的例子简化为:
fping -q example.com && firefox