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 会阻塞直到命令完成