systemd-run命令

systemd-run 命令 #

systemd-run命令用于创建和启动临时的 systemd 服务或定时器单元。它允许用户以 systemd 单元的形式运行命令,可以利用 systemd 的所有功能,如资源控制、依赖管理和日志记录。

语法 #

systemd-run [选项] [命令 [参数...]]

常用选项 #

选项 描述
--unit=名称 指定单元名称
--service-type=类型 设置服务类型(simple、oneshot、forking 等)
--on-active=时间 在指定时间后激活(创建定时器)
--on-boot=时间 在系统启动后指定时间激活
--on-startup=时间 在 systemd 启动后指定时间激活
--on-calendar=规范 按日历规范激活(如"--* 15:00:00")
--user 在用户模式下运行
--system 在系统模式下运行(默认)
--scope 创建瞬态作用域单元而不是服务单元
--slice=名称 将单元放入指定的切片
-p 属性=值 设置单元属性
--wait 等待命令完成
--remain-after-exit 命令退出后保留服务
--description=描述 设置单元描述

常见用法 #

运行一次性命令 #

systemd-run --unit=mytask date

运行命令并等待完成 #

systemd-run --wait echo "Hello World"

设置资源限制 #

systemd-run -p CPUQuota=20% -p MemoryLimit=1G my_resource_intensive_command

创建定时任务(每天 15:00 运行) #

systemd-run --on-calendar="*-*-* 15:00:00" --unit=daily-backup /usr/local/bin/backup.sh

在系统启动后 5 分钟运行命令 #

systemd-run --on-boot=5min /usr/local/bin/startup-check.sh

在用户模式下运行命令 #

systemd-run --user --unit=myapp /usr/bin/myapp

查看和管理单元 #

使用标准的 systemd 命令管理通过 systemd-run 创建的单元:

# 查看单元状态
systemctl status 单元名称

# 停止单元
systemctl stop 单元名称

# 查看单元日志
journalctl -u 单元名称

定时器单元 #

使用--on-calendar--on-boot等选项创建的是 systemd 定时器单元,可以使用以下命令管理:

# 列出所有定时器
systemctl list-timers

# 启用定时器(使其在启动时自动启动)
systemctl enable 定时器名称.timer

# 禁用定时器
systemctl disable 定时器名称.timer

与传统调度工具的比较 #

特性 systemd-run cron at
资源控制 支持 不支持 不支持
依赖管理 支持 不支持 不支持
日志集成 集成到 journald 分散在 syslog 和邮件中 分散在 syslog 和邮件中
失败处理 可配置重启策略 无内置重启 无内置重启
精确调度 毫秒级精度 分钟级精度 分钟级精度

注意事项 #

  • systemd-run 创建的临时单元在系统重启后不会保留,除非显式保存
  • 要创建永久单元,应该创建正式的 systemd 单元文件
  • 在用户模式下运行时,需要确保用户的 systemd 实例正在运行
  • 使用--wait选项时,systemd-run 会阻塞直到命令完成