一旦连接到互联网,我怎样才能触发某些事情?

一旦连接到互联网,我怎样才能触发某些事情?

我想知道如何让机器在每次连接到互联网时做一些事情?

就像我连接到互联网后检查更新一样?

谢谢

答案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

相关内容