You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让脚本休眠至systemd计时器日历时间触发?

如何让脚本休眠至systemd计时器日历时间触发?

嘿,刚好我也研究过类似的需求!目前确实没有官方提供的systemd-timer-sleep这类一键式命令,但我们可以用systemd自带的工具实现类似效果,不用自己手动计算秒数,完全符合你想要的简单方式:

方法1:用systemd-run创建临时等待Timer

这是最贴合systemd timer逻辑的方式,我们可以创建一个一次性的临时timer,让它在指定的日历时间触发,同时让命令阻塞直到触发完成:

systemd-run --user --on-calendar="03:00" --wait true
  • --user:用当前用户的会话运行,不需要root权限;如果是系统级脚本,可以去掉这个参数,用root执行
  • --on-calendar="03:00":直接使用systemd的日历时间格式,你可以换成任何符合要求的表达式(比如*-*-* 03:00:00、Mon *-*-* 10:00等)
  • --wait:让systemd-run命令一直阻塞,直到timer触发并执行完后面的命令
  • true:是timer触发后执行的无意义命令,只是为了满足语法要求,不会产生任何实际输出

执行这条命令后,你的脚本就会一直等待,直到下一个3:00am到来。

方法2:用systemd-analyze计算休眠秒数

如果不想创建临时的systemd服务,也可以用systemd-analyze把日历时间转换成Unix时间戳,再计算出需要休眠的秒数,传给sleep命令:

sleep "$(($(systemd-analyze calendar "03:00" --output=unix-epoch) - $(date +%s)))"
  • systemd-analyze calendar "03:00" --output=unix-epoch:会输出下一个匹配03:00的时间点的Unix时间戳
  • $(date +%s):获取当前时间的Unix时间戳
  • 两者相减得到需要休眠的秒数,直接传给sleep命令

这个方法更轻量,不需要依赖systemd的服务管理,但同样能直接复用systemd的日历时间语法,省去自己解析日期的麻烦。

备注:内容来源于stack exchange,提问作者Amandasaurus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:38:14