首頁 > 套件與系統管理 > systemd-run

systemd-run:以臨時 systemd 單位執行程式

systemd-run 指令用於以臨時的範圍 (scope) 或服務 (service) 單位來執行指定的程式。這使得程式的資源管理、執行環境、日誌記錄等都可以在 systemd 的控制下進行,並且可以獨立於現有的 shell 環境執行。對於需要背景執行的任務、需要資源限制的任務,或需要特定 systemd 功能的任務,這尤其有用。

概述

systemd-run 透過在 systemd 的控制下執行指令,讓該指令作為獨立的 systemd 單位 (unit) 運作。這使得可以利用 systemd 強大的功能,例如處理序群組管理、資源限制和日誌整合。

主要特點

  • 建立臨時的範圍或服務單位
  • 設定程式的資源限制和優先順序
  • 在 shell 工作階段結束後仍可在背景執行 (服務單位)
  • 透過 systemd journal 進行整合式日誌記錄
  • 在容器和虛擬機器內執行指令

主要選項

systemd-run 提供了各種選項,用於控制執行程式的環境和 systemd 單位的屬性。

單位類型和名稱

執行控制與環境

生成的命令:

請試著組合命令。

這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。

`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` 選項。

以使用者單位執行指令

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 來解析。否則,指令可能無法正確執行。



相同類別命令