systemd-run 是什么
systemd-run 能把一条命令临时交给 systemd 托管,既不用写单元文件也不改配置:它即时创建一个瞬态单元,命令输出进 journal,资源限制、执行时机等参数都能用 systemd 的原生属性表达。它的价值集中在一次性场景——延迟执行、临时限制内存跑压测、以独立单元形式启动进程并保留完整启动日志与状态,比单纯挂在后台更容易被 systemd 工具链观察到。
基本信息
| 适用平台 | 使用 systemd 的 GNU/Linux(PID 1 必须是 systemd) |
|---|---|
| 语法 | systemd-run [选项] 命令... |
| 常用选项 | --unit 命名、--collect 结束后清理、--on-active 延迟、--scope 在当前会话层级运行 |
| 资源限制 | 用属性参数传内存上限、CPU 配额等 |
| 状态查看 | systemctl status 单元名或 journalctl -u 单元名 |
| 生命周期 | 瞬态单元重启后不保留 |
典型使用场景
- 延迟执行一条命令,例如几分钟后再跑一次任务。
- 临时以受限资源运行压测工具,避免吃满整机。
- 把一条命令作为独立单元启动,用统一方式查看状态与日志。
- 复现服务启动失败:用与正式单元一致的属性临时启动观察现象。
- 排障时隔离运行命令,避免污染当前 shell 的环境与工作目录。
常用写法
常用写法
systemd-run --unit=quicktest --collect /bin/sleep 60 # 命名瞬态单元
systemd-run --on-active=5m --unit=delayedjob /usr/local/bin/job.sh # 延迟 5 分钟
systemd-run --scope -p MemoryMax=512M /opt/tool/stress --vm 1 # 限内存运行
systemd-run --unit=debugrun -p MemoryMax=256M -p CPUQuota=50% ./app # 限 CPU 与内存
systemctl list-units 'run-*' # 查看瞬态单元
systemctl status quicktest --no-pager # 查看状态与退出信息
journalctl -u quicktest -n 20 # 查看该单元输出常用选项读法
| 选项 | 作用 | 使用要点 |
|---|---|---|
| --unit | 给瞬态单元命名 | 便于后续用 systemctl 查看与停止 |
| --collect | 结束后自动清理 | 不加会在系统里留下失败记录 |
| --on-active | 延迟一段时间执行 | 只执行一次,不是周期性任务 |
| --scope | 在当前会话层级运行 | 生命周期与调用者相关,行为不同 |
| -p 属性 | 设置单元属性 | 可限制内存、CPU 配额等 |
| --service-type | 指定服务类型 | 影响进程模型与停止行为 |
--collect 让单元结束后自动清理:不加的话瞬态单元会留下失败记录,日积月累让整体状态巡检充满噪音,真正的故障被淹没。
systemd-run 依赖 PID 1 是 systemd:容器或旧发行版里可能不可用,动手前先确认初始化系统类型,否则会直接报错。
瞬态单元默认放在运行期目录,重启后不会保留;需要长期存在的服务仍应写正式单元文件,不要把临时单元当服务托管方案。