Обзор
systemd-run запускает команду под управлением systemd, заставляя ее работать как отдельный юнит systemd. Это позволяет использовать мощные функции systemd для управления группами процессов, ограничения ресурсов и интеграции логирования.
Основные возможности
- Создание временных юнитов типа scope или service
- Ограничение ресурсов программы и установка приоритетов
- Фоновый запуск после завершения сеанса оболочки (для юнитов типа service)
- Интегрированное логирование через журнал systemd
- Запуск команд внутри контейнеров и виртуальных машин
Основные опции
systemd-run предоставляет различные опции для управления средой выполнения программы и свойствами юнита systemd.
Тип и имя юнита
Управление запуском и среда
Сгенерированная команда:
Комбинируйте команды.
Описание:
`systemd-run` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Примеры использования
Различные примеры использования команды systemd-run.
Запуск команды в юните типа scope по умолчанию
systemd-run --scope echo "Hello from systemd-run"
Запускает простую команду в юните типа scope. Эта команда будет выполняться до завершения работы systemd-run.
Запуск команды в фоновом юните типа service
systemd-run --service --unit=my-long-task.service sleep 300
Создает фоновый сервис, который продолжает работать после завершения сеанса оболочки. Имя сервиса указывается с помощью --unit.
Установка приоритета ЦП и ограничения памяти
systemd-run --nice=10 --property=MemoryLimit=500M stress --cpu 4
Устанавливает низкий приоритет ЦП (nice=10) и ограничивает использование памяти до 500 МБ для запускаемой программы.
Запуск команды в определенном рабочем каталоге
systemd-run --working-directory=/tmp bash -c 'pwd; touch testfile.txt'
Настраивает выполнение команды в каталоге /tmp.
Запуск конвейерной команды через оболочку
systemd-run --shell echo "Hello" | cat
Для использования функций оболочки, таких как конвейеры (|) или перенаправления (>), необходимо использовать опцию --shell.
Запуск команды в пользовательском юните
systemd-run --user --scope echo "User-specific task"
Создает и запускает юнит в экземпляре systemd текущего пользователя. Это не влияет на всю систему.
Советы и замечания
Полезные советы и замечания при использовании systemd-run.
Юниты типа scope против service
Юнит типа scope (--scope) действителен только во время выполнения команды systemd-run и зависит от родительского процесса. Юнит типа service (--service) выполняется независимо в фоновом режиме даже после завершения работы команды systemd-run. Для фоновых задач обычно используется --service.
- `--scope`: Зависит от родительского процесса, завершается вместе с `systemd-run`
- `--service`: Независимый фоновый запуск, сохраняется после завершения `systemd-run`
Проверка и управление состоянием юнитов
Состояние юнитов, созданных с помощью systemd-run, можно проверить с помощью команды `systemctl`. Юниты типа service можно остановить с помощью `systemctl stop` и т.д.
- Проверка состояния: `systemctl status <unit_name>`
- Остановка сервиса: `systemctl stop <unit_name>`
- Просмотр логов: `journalctl -u <unit_name>`
Использование ограничений ресурсов
С помощью опции `--property` можно ограничивать различные ресурсы, такие как ЦП, память, ввод-вывод и т.д. Это очень эффективно для повышения стабильности системы и предотвращения чрезмерного использования ресурсов определенными процессами.
`--shell` для использования функций оболочки
Если команда включает специальные функции оболочки, такие как конвейеры (|), перенаправления (>) или фоновый запуск (&), необходимо использовать опцию `--shell`, чтобы команда интерпретировалась оболочкой. В противном случае команда может быть выполнена некорректно.