> 软件包与系统管理 > systemd-run

systemd-run: 使用临时 systemd 单元运行程序

systemd-run 命令将指定的程序作为临时作用域(scope)或服务(service)单元运行。这使得程序可以在 systemd 的控制下进行资源管理、执行环境配置和日志记录,并能独立于当前 shell 环境运行。它特别适用于后台任务、需要资源限制的任务或需要特定 systemd 功能的任务。

概述

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



相同类别命令