概述
systemd-run 通过在 systemd 的控制下运行命令,使该命令作为一个独立的 systemd 单元(unit)运行。这使得可以利用 systemd 的强大功能,如进程组管理、资源限制和日志集成。
主要特点
- 创建临时作用域或服务单元
- 设置程序的资源限制和优先级
- 在 shell 会话结束后仍可后台运行(服务单元)
- 通过 systemd journal 进行统一日志记录
- 在容器和虚拟机中运行命令
主要选项
systemd-run 提供了多种选项来控制被执行程序的运行环境和 systemd 单元的属性。
单元类型和名称
执行控制和环境
生成的命令:
请尝试组合命令。
描述:
`systemd-run` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
使用示例
systemd-run 命令的各种使用示例。
以默认作用域单元运行命令
systemd-run --scope echo "Hello from systemd-run"
以临时作用域单元运行简单命令。此命令将在 systemd-run 退出前一直运行。
以后台服务单元运行命令
systemd-run --service --unit=my-long-task.service sleep 300
创建一个后台服务,即使 shell 会话结束也会继续运行。使用 `--unit` 指定服务名称。
设置 CPU 优先级和内存限制
systemd-run --nice=10 --property=MemoryLimit=500M stress --cpu 4
降低被执行程序的 CPU 优先级(nice=10)并将内存使用限制为 500MB。
在特定工作目录中运行命令
systemd-run --working-directory=/tmp bash -c 'pwd; touch testfile.txt'
设置命令在 `/tmp` 目录中执行。
通过 Shell 运行管道命令
systemd-run --shell echo "Hello" | cat
如果命令包含管道(|)或重定向(>)等 Shell 功能,则必须使用 `--shell` 选项,以便命令通过 Shell 进行解析。
以用户单元运行命令
systemd-run --user --scope echo "User-specific task"
在当前用户的 systemd 实例中创建和运行单元。这不会影响整个系统。
提示与注意事项
使用 systemd-run 时的有用提示和注意事项。
作用域单元 vs 服务单元
作用域单元(`--scope`)仅在 `systemd-run` 命令运行时有效,并依赖于父进程。服务单元(`--service`)在 `systemd-run` 命令退出后仍可在后台独立运行。后台任务通常使用 `--service`。
- `--scope`: 依赖于父进程,`systemd-run` 退出时一同终止
- `--service`: 后台独立运行,`systemd-run` 退出后仍保持运行
检查和管理单元状态
可以使用 `systemctl` 命令检查 systemd-run 创建的单元的状态。服务单元可以使用 `systemctl stop` 等命令停止。
- 检查状态:`systemctl status <unit_name>`
- 停止服务:`systemctl stop <unit_name>`
- 查看日志:`journalctl -u <unit_name>`
利用资源限制
可以使用 `--property` 选项限制 CPU、内存、I/O 等多种资源。这对于提高系统稳定性并防止特定进程过度消耗资源非常有效。
使用 Shell 功能时需加 `--shell`
如果命令包含管道(`|`)、重定向(`>`)或后台执行(`&`)等 Shell 特殊功能,务必使用 `--shell` 选项,以确保命令通过 Shell 进行解析。否则,命令可能无法正确执行。