Zet*_*tor 8 systemd services network-interface systemd-timer connectivity
我用来systemd-timer
定期运行一个使用网络服务的脚本。
问题是,在系统恢复或唤醒时,互联网连接不会立即启动,但计时器会被触发,因此脚本返回错误(如果服务等待几秒钟,脚本将正确运行,并且会出现无需将任务推迟到下次运行。)
1-如何使计时器(或与其关联的服务)等待网络连接可用?
2-当系统尚未上线时,如何使计时器(或服务)不调用脚本?
Fel*_*xJN 14
添加After=network-online.target
到[Unit]
计时器部分。
解释:
[Unit]
定时器确实接受服务部分中已知的所有相关排序命令。事实上,定时器和服务的[Unit]
和[Install]
部分是相同的。形成官方手册:
名称以“.timer”结尾的单元配置文件编码有关由 systemd 控制和监督的计时器的信息,用于基于计时器的激活。
本手册页列出了特定于此单元类型的配置选项。所有单元配置文件的通用选项请参见systemd.unit(5) 。通用配置项在通用的[Unit]和[Install]部分中配置。定时器特定的配置选项在 [Timer] 部分中配置。
也就是说,您需要了解network-online.target定义网络是否已启动。
network-online.target 是主动等待网络“up”的目标,其中“up”的定义由网络管理软件定义。通常它表示某种已配置的、可路由的 IP 地址。其主要目的是主动延迟服务的激活,直到网络建立为止。
局限性
network-online.target
不是检查互联网,而是检查网络连接。当然,局域网本身可能无法访问互联网。如果您不能依靠路由器或您的 ISP 来提供连接,则您必须制作一个特殊的协议来test-internet.service
ping 某些网站,并且仅在成功一次后才定义为活动状态(否则每 15 秒左右就会在失败时重新启动)。这应该是Type=oneshot
一种RemainAfterExit=yes
服务。但我认为这不是您所要求的。
范围:系统/用户
请小心,就像系统network-online.target
范围单元一样。用户范围内的单元将看不到它并且无法启动。这可以通过创建链接单元来解决:。路径可能会有所不同,可以通过运行以下命令来检查位置:systemctl --user link /lib/systemd/system/network-online.target
systemctl show --property FragmentPath network-online.target
归档时间: |
|
查看次数: |
2901 次 |
最近记录: |