概述
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 进行解析。否则,命令可能无法正确执行。