systemd-run: запуск программы во временном unit
Запускает программу во временном unit с заданными параметрами. Окружение получается таким же, как у настоящей службы, а unit исчезает после завершения.
Что делает
Это лучший способ ответить на вопрос «почему в терминале работает, а в службе нет». Вы задаёте те же параметры — пользователя, каталог, окружение, изоляцию — и сразу видите, воспроизводится ли проблема.
Второе применение — разовые задачи с ограничениями: запустить тяжёлую операцию с квотой процессора и пределом памяти, не создавая постоянный unit.
Где ставится. Команда в терминале. Параметры задаются ключом --property.
Значения
| Значение | Что происходит |
|---|---|
--uid=app --gid=app | запустить от пользователя службы. |
--property=WorkingDirectory=/opt/app | любой параметр unit-файла. |
--wait --pty | дождаться завершения и показать вывод в терминале. |
--on-calendar="*-*-* 03:00:00" | создать временный таймер. |
--scope | запустить в области, а не в службе: процесс останется вашим. |
Пример
Проверка программы в окружении службы.
sudo systemd-run --uid=app --gid=app \
--property=WorkingDirectory=/opt/myapp \
--property=ProtectSystem=strict \
--property=StateDirectory=myapp \
--wait --pty /usr/local/bin/myapp --check
Если здесь проблема воспроизводится, дело в окружении, а не в самой программе. Дальше параметры убирают по одному, пока не найдётся виновник.
Типичные ошибки
Без ключа ожидания команда возвращает управление сразу, и вывод придётся искать в журнале.
Временный unit исчезает после завершения: его состояние надо смотреть либо с ожиданием, либо в журнале.
Права на запуск от другого пользователя требуют root, как и у обычных служб.
Связанные ошибки
- В терминале работает, а под systemd нетСамая частая жалоба: программа запускается руками, но не как служба. Полный разбор отличий окружения.
- status=203/EXEC в systemdКод 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
- status=226/NAMESPACE в systemdКод 226/NAMESPACE: не удалось настроить пространства имён монтирования, UTS или IPC. Частая причина — путь в ReadOnlyPaths= или ProtectHome=.
Рядом стоящие параметры
Источники
- systemd-run(1)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)