我通过 systemd 为我的台式电脑运行备份。使用
OnCalendar = daily
Persistent = true
RandomizedDelaySec = 10m
导致备份每天运行一次。如果计算机已开机,备份将在下次启动后运行。
问题是,如果我挂起计算机,备份会在唤醒后尝试立即运行,没有任何延迟。由于网络连接需要几秒钟,因此备份失败。
我认为这应该由 处理RandomizedDelaySec
,但它是在计时器创建时设置的。我如何告诉 systemd 在唤醒后等待?
答案1
根据手册页,RandomizedDelaySec=
将“将计时器延迟在 0 和指定时间值之间随机选择、均匀分布的时间量”。
所以你真的不想依赖RandomizedDelaySec=
于需要延迟的东西,因为 0m 是非常现实的可能性。
通常情况下,RandomizedDelaySec=
确实可以很好地与 配合使用Persistent=
,但我不太确定它对“挂起”的反应如何,因为我不确定系统在该状态期间是否被认为是停止的。我认为对这个挂起用例进行故障排除是一个转移注意力的事情。
相反,您有两个选择:
- 手动添加
ExecStartPre=/bin/sleep ...
到您的备份服务以确保最小延迟,或者 - 添加
After=network.target
到您的计时器或服务,或者After=mymount.mount
如果您正在等待自定义fuse.sshfs
安装座出现。
选项 1 是一个简单的包罗万象的案例。但我通常不喜欢它,sleep
因为在缓慢的日子里,你什么都不会等待,而在繁忙的日子里,你可能等待的时间不够长。对于您正在等待完美时机的实际状态,没有任何反馈。但由于这是一项后台、非时间紧迫的任务,因此即使在没有暂停的日子里,多等待 10 分钟可能也没什么问题。