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