首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使系统定时器依赖于互联网连接?

如何使系统定时器依赖于互联网连接?
EN

Unix & Linux用户
提问于 2021-09-16 08:58:28
回答 1查看 1.9K关注 0票数 7

我使用systemd-timer定期运行一个使用run服务的脚本。

问题是,在系统恢复或唤醒时,互联网连接不会立即启动,但计时器会被触发,因此脚本会返回错误(如果服务等待几秒钟,脚本将正确运行,并且没有必要将任务推迟到下一次运行)。

1-如何使计时器(或与之相关的服务)等待网络连接可用?

2-当系统尚未联机时,如何使计时器(或服务)不调用脚本?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-09-16 10:24:13

After=network-online.target添加到计时器的[Unit]部分。

解释:

定时器确实接受[Unit]部分中所有已知于服务的相对排序命令。实际上,对于计时器和服务,[Unit][Install]部分都是相同的。表格官方手册

一种单元配置文件,其名称以".timer“结尾,它编码由systemd控制和监督的计时器信息,用于基于计时器的激活。此手册页列出了特定于此单元类型的配置选项。有关所有单元配置文件的公共选项,请参见systemd.unit(5)。通用配置项在泛型单元和安装部分中进行了配置。定时器特定的配置选项在计时部分中配置。

这就是说,您需要了解定义网络是否运行的network-online.target

NetworkOnline.Target是一个主动等待直到网络“向上”的目标,其中"up“的定义由网络管理软件定义。通常它表示某种配置的、可路由的IP地址。其主要目的是在建立网络之前主动延迟服务的激活。

限制

network-online.target正在检查的不是互联网,而是网络连接。当然,局域网本身可能无法访问互联网。如果你不能依靠路由器或你的ISP提供连接,你就必须制作一个特殊的test-internet.service,它只在某个网站成功一次之后才被定义为活动(否则每15s左右就重新启动一次)。这应该是一种Type=oneshotRemainAfterExit=yes服务。但我想这不是你要的。

Scopes:系统/用户

要小心,因为network-online.target是一个系统范围单元。用户范围内的单位将看不到它,并且无法启动。这可以通过创建一个链接单元:systemctl --user link /lib/systemd/system/network-online.target来解决。路径可能会有所不同,可以通过运行:systemctl show --property FragmentPath network-online.target来检查位置

票数 11
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/669258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档