RandomizedDelaySec + 唤醒后持久

RandomizedDelaySec + 唤醒后持久

我通过 systemd 为我的台式电脑运行备份。使用

OnCalendar = daily
Persistent = true
RandomizedDelaySec = 10m

导致备份每天运行一次。如果计算机已开机,备份将在下次启动后运行。

问题是,如果我挂起计算机,备份会在唤醒后尝试立即运行,没有任何延迟。由于网络连接需要几秒钟,因此备份失败。

我认为这应该由 处理RandomizedDelaySec,但它是在计时器创建时设置的。我如何告诉 systemd 在唤醒后等待?

答案1

根据手册页RandomizedDelaySec=将“将计时器延迟在 0 和指定时间值之间随机选择、均匀分布的时间量”。

所以你真的不想依赖RandomizedDelaySec=于需要延迟的东西,因为 0m 是非常现实的可能性。

通常情况下,RandomizedDelaySec=确实可以很好地与 配合使用Persistent=,但我不太确定它对“挂起”的反应如何,因为我不确定系统在该状态期间是否被认为是停止的。我认为对这个挂起用例进行故障排除是一个转移注意力的事情。

相反,您有两个选择:

  1. 手动添加ExecStartPre=/bin/sleep ...到您的备份服务以确保最小延迟,或者
  2. 添加After=network.target到您的计时器或服务,或者After=mymount.mount如果您正在等待自定义fuse.sshfs安装座出现。

选项 1 是一个简单的包罗万象的案例。但我通常不喜欢它,sleep因为在缓慢的日子里,你什么都不会等待,而在繁忙的日子里,你可能等待的时间不够长。对于您正在等待完美时机的实际状态,没有任何反馈。但由于这是一项后台、非时间紧迫的任务,因此即使在没有暂停的日子里,多等待 10 分钟可能也没什么问题。

相关内容