首页/系统/Linux 运维命令速查/systemd-run 临时定时任务
定时任务与计划50 条

systemd-run 临时定时任务

不想落 unit 文件时的临时定时器:systemd-run --on-calendar 创建瞬态 timer/unit,适合一次性实验与临时巡检。

Linux 运维命令速查系统更新于 2026-10-13

systemd-run 临时定时任务

不想落 unit 文件时,可以用 systemd-run 直接创建瞬态 timer 与 service:--on-calendar 按日历触发,--on-active 在延迟之后触发,任务完成后瞬态单元自动清理。临时巡检、一次性实验、验证日历表达式都很方便;正式且长期的任务仍应写成 unit 文件并纳入版本管理。

基本信息

用途在命令行创建瞬态定时任务
语法systemd-run --on-calendar=… [--unit=名] 命令
相关选项--on-active 延迟触发、--on-boot 启动后触发、--collect 执行后清理
生命周期瞬态单元默认不持久化,重启后不再存在

典型使用场景

  • 临时巡检:在未来某时刻跑一次磁盘检查
  • 验证日历表达式是否符合预期
  • 延迟执行一次性的重载或重启动作
  • 演示环境里快速造一个定时任务
  • 等业务低峰时段自动执行维护脚本
  • 避免为一次性需求长期保留 unit 文件

常用示例

常用示例
sudo systemd-run --on-calendar='*-*-* 03:00:00' --unit=tmp-diskcheck /opt/scripts/diskcheck.sh
sudo systemd-run --on-active=30s --unit=tmp-reload systemctl reload nginx
systemctl list-timers 'tmp-*' --no-pager      # 查看瞬态定时器
systemctl status tmp-diskcheck.timer --no-pager   # 查看状态
journalctl -u tmp-diskcheck.service -n 20     # 查看执行日志
sudo systemctl stop tmp-diskcheck.timer       # 停止并清理
systemctl daemon-reload                       # 手工调整后重新加载

触发选项

选项触发方式典型用途
--on-calendar按日历表达式触发每天固定时刻执行
--on-active延迟一段时间后触发稍后执行一次
--on-boot系统启动后触发开机若干秒后做动作
--unit自定义单元名称便于后续管理与清理
--collect执行后自动清理一次性任务不留状态
--on-calendar 使用 systemd 的日历表达式语法,写法与 unit 里的 OnCalendar 一致;交给自动化之前,先手工跑一次确认表达式能被正确解析。
瞬态单元不持久化:机器重启后不会自动恢复,重启后仍需执行的任务必须写成真正的 unit 文件,放进配置管理。
--unit 名称冲突会导致创建失败,脚本里生成单元名时加上时间戳后缀,可以避免重复提交时相互覆盖。
瞬态 timer 的执行结果同样进入 journal:用 journalctl -u 单元名 查看,排查未触发问题时先确认单元是否仍处于 active 状态。
验证日历表达式可以先创建瞬态 timer 再用 list-timers 看下次触发时间,比上线之后慢慢等结果高效得多。

易错点

  • 依赖瞬态单元穿越重启:重启后任务消失,约定好的动作不再执行
  • --unit 名字写死:重复提交时创建失败,脚本静默出错
  • 日历表达式写错又不先验证:任务永不触发,且没有明显报错
  • 把临时实验当长期方案:缺少版本管理与审计,出问题无从追溯

数据来源与参考

  • man 1 systemd-run
  • systemd.time(7)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌