我使用systemd-timer定期运行一个使用run服务的脚本。
问题是,在系统恢复或唤醒时,互联网连接不会立即启动,但计时器会被触发,因此脚本会返回错误(如果服务等待几秒钟,脚本将正确运行,并且没有必要将任务推迟到下一次运行)。
1-如何使计时器(或与之相关的服务)等待网络连接可用?
2-当系统尚未联机时,如何使计时器(或服务)不调用脚本?
发布于 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=oneshot和RemainAfterExit=yes服务。但我想这不是你要的。
要小心,因为network-online.target是一个系统范围单元。用户范围内的单位将看不到它,并且无法启动。这可以通过创建一个链接单元:systemctl --user link /lib/systemd/system/network-online.target来解决。路径可能会有所不同,可以通过运行:systemctl show --property FragmentPath network-online.target来检查位置
https://unix.stackexchange.com/questions/669258
复制相似问题