SystemdDoctor
systemd-run

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) официальная документация
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026