首页/系统/信创系统运维速查/systemd-run 临时与延迟执行
服务与运维65 条

systemd-run 临时与延迟执行

不写 unit 文件直接让 systemd 托管一次性命令或定时任务:systemd-run 立即执行并接管输出;--on-active/--on-calendar 生成瞬时 timer,适合临时运维动作。

信创系统运维速查系统更新于 2026-10-13

systemd-run 是什么

systemd-run 让 systemd 直接托管一条命令或脚本,不必事先编写 unit 文件。它有两条用法:加 --unit 立即以服务方式运行一次性任务,日志进 journal;加 --on-active(相对时间)或 --on-calendar(日历时间)则生成瞬时 timer,到点再执行。适合临时排障、限时压测、夜间批作业这类用完即走的动作,长期计划任务仍应落正式 unit。

基本信息

适用平台systemd 管理的 Linux:RHEL/CentOS 7+、openEuler、银河麒麟、统信 UOS
权限要求默认 root 运行;普通用户加 --user 走用户实例
瞬时单元存放于 /run/systemd/transient/,重启后消失
输出查看日志进 journal,用 journalctl -u 单元名 查看

典型使用场景

  • 临时排障:把诊断命令交给 systemd 跑,SSH 断开也不会被中断
  • 延迟动作:30 分钟后重启服务或清缓存,不值得为它写 crontab
  • 夜间批处理:用 --on-calendar 指定每天凌晨跑一次,结束后不留文件
  • 资源限制:用 --property 限定内存与 CPU 上限再跑一次性任务,控制对在跑业务的影响
  • 权限验证:以 --uid 指定普通用户运行,提前验证应用的非特权启动方式

常用示例

常用示例
systemd-run --unit=test-ping ping -c 3 10.0.0.1      # 立即运行并交给 systemd 托管
systemd-run --on-active=30m /opt/scripts/check.sh    # 30 分钟后执行一次
systemd-run --on-calendar='*-*-* 03:00:00' /opt/job.sh  # 每天 03:00 执行
journalctl -u test-ping -n 20 --no-pager             # 查看这次运行的输出
systemctl list-timers 'run-*' --all                  # 列出瞬时 timer
systemd-run --property=MemoryMax=512M --unit=big ./tool  # 限内存运行
systemd-run --user --on-active=10m /home/u/notify.sh # 用户级延时任务,无需 root

常用选项速查

选项作用注意事项
--unit=名字指定瞬时单元名同名单元已存在会直接报错
--on-active=30m相对延时执行单位 s/m/h/d,从提交时刻算起
--on-calendar=...按日历时间执行格式同 OnCalendar,先用 systemd-analyze calendar 校验
--property=附加单元属性如 MemoryMax、CPUQuota、User、Restart
--collect结束后自动清理单元避免失败的单元残留在 systemctl 列表
--pipe标准输出接回当前终端不加则输出只进 journal
瞬时单元放在 /run 下,重启即消失:不要用它承载需要跨重启保留的计划任务,那种场景写正式 .timer 文件。
systemd-run 默认以干净环境变量执行,脚本里别依赖当前 shell 的 PATH 与自定义变量;需要时用 --setenv=KEY=VALUE 显式传入。

易错点

  • --on-active 是相对时间、--on-calendar 是日历时间,两者不能同时给,混用会直接报错。
  • 瞬时单元以 root 且干净环境执行,脚本依赖 PATH 或 shell 变量时容易静默失败,排查先看 journalctl -u 的原始输出。
  • 用 --unit 指定名字时同名单元重复提交会失败,批量脚本里名字要带时间戳或随机后缀。
  • --on-calendar 表达式写错不会在提交时报错,表现为到点不执行;提交前用 systemd-analyze calendar 验证一遍。

数据来源与参考

  • man 1 systemd-run
  • man 5 systemd.timer(瞬时单元)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌