Skip to content

FAQ и решение проблем

Ответы на частые вопросы и решения типичных проблем.

Часто задаваемые вопросы

Общие вопросы

Чем Runium отличается от PM2?

АспектRuniumPM2
ФокусУправление множеством разнородных процессовУправление Node.js приложениями
ЗависимостиВстроенная поддержка зависимостей между задачамиНет встроенной поддержки
ТриггерыТаймеры, события, file watchersОграниченно (watch mode)
КонфигурацияЕдиный JSON с макросамиecosystem.config.js
ПлагиныРасширяемая архитектураОграниченно

Runium лучше подходит для сложных сценариев с множеством взаимосвязанных процессов, в то время как PM2 оптимизирован для production-деплоя Node.js приложений.

Чем Runium отличается от Docker Compose?

Docker Compose управляет контейнерами, Runium - процессами. Runium может:

  • запускать обычные процессы без контейнеризации
  • использовать Docker через плагин @runium/plugin-docker
  • комбинировать контейнеры и обычные процессы в одном проекте
  • предоставлять более гибкую логику зависимостей и триггеров

Поддерживается ли Windows?

Да, Runium работает на Windows, macOS и Linux. Используйте макрос $platform() для кроссплатформенных конфигураций:

json
{
  "command": "$eq($platform(), win32, cmd, /bin/sh)",
  "arguments": ["$eq($platform(), win32, /c, -c)", "echo Hello"]
}

Конфигурация

Как передать переменные окружения в задачу?

Через свойство env в опциях задачи:

json
{
  "id": "my-task",
  "options": {
    "command": "node",
    "arguments": ["app.js"],
    "env": {
      "NODE_ENV": "development",
      "PORT": "3000",
      "API_KEY": "$env(API_KEY)"
    }
  }
}

Как использовать переменные из .env файла?

Укажите путь к файлу при запуске проекта:

sh
runium project start my-project --env .env

Или в файле .runiumrc.json:

json
{
  "env": {
    "path": [".env", ".env.local"]
  }
}

Как сделать задачу, которая не запускается автоматически?

Установите mode: "deferred":

json
{
  "id": "non-automatic-task",
  "mode": "deferred",
  "options": {
    "command": "echo",
    "arguments": ["This task is started by handler of another task or trigger"]
  }
}

Как запустить задачу в определённой директории?

Используйте свойство cwd:

json
{
  "id": "frontend",
  "options": {
    "command": "npm",
    "arguments": ["run", "dev"],
    "cwd": "./packages/frontend"
  }
}

Как указать относительный путь?

Используйте макрос $path():

json
{
  "options": {
    "command": "node",
    "arguments": ["$path(../scripts/build.js)"]
  }
}

Зависимости и порядок запуска

Как дождаться полной готовности сервиса, а не только запуска?

По умолчанию status: "started" означает, что процесс запущен. Для проверки реальной готовности используйте health-check задачу:

json
{
  "tasks": [
    {
      "id": "database",
      "options": {
        "command": "docker",
        "arguments": ["run", "postgres"]
      }
    },
    {
      "id": "db-health-check",
      "options": {
        "command": "pg_isready",
        "arguments": ["-h", "localhost", "-p", "5432"]
      },
      "dependencies": [
        { "taskId": "database", "condition": { "status": "started" } }
      ],
      "restart": {
        "policy": "on-failure",
        "maxRetries": 10,
        "delay": 1000
      }
    },
    {
      "id": "api",
      "options": { "command": "npm", "arguments": ["start"] },
      "dependencies": [
        { "taskId": "db-health-check", "condition": { "status": "completed" } }
      ]
    }
  ]
}

Что делать при циклических зависимостях?

Runium автоматически обнаруживает циклические зависимости и выдаёт ошибку. Пересмотрите архитектуру:

  • возможно, одна из зависимостей не нужна
  • используйте триггеры вместо зависимостей для сложных сценариев

Триггеры

Как запустить задачу по расписанию?

Используйте триггер interval:

json
{
  "triggers": [
    {
      "id": "every-hour",
      "type": "interval",
      "options": { "interval": 3600000 },
      "action": {
        "type": "start-task",
        "options": { "taskId": "backup" }
      }
    }
  ]
}

Как запустить задачу при изменении файлов?

Установите плагин @runium/plugin-file-watch:

sh
npm install @runium/plugin-file-watch
runium plugin add @runium/plugin-file-watch

И добавьте триггер:

json
{
  "triggers": [
    {
      "id": "watch-src",
      "type": "file-watch",
      "options": {
        "watch": {
          "path": ["./src"],
          "events": ["change", "add"]
        }
      },
      "action": {
        "type": "start-task",
        "options": { "taskId": "server" }
      }
    }
  ]
}

Решение проблем

Ошибки при запуске

Error: ENOENT: no such file or directory

Причина: Указанный файл или команда не найдены.

Решение:

  1. Проверьте, что команда доступна в PATH: which <command>
  2. Используйте абсолютный путь или макрос $path()
  3. Проверьте свойство cwd - возможно, рабочая директория неверна

Error: spawn EACCES

Причина: Нет прав на выполнение файла.

Решение:

sh
chmod +x ./script.sh

Error: Invalid project configuration

Причина: Ошибка в JSON-конфигурации.

Решение:

  1. Проверьте синтаксис JSON (запятые, кавычки, скобки)
  2. Используйте команду валидации:
    sh
    runium project validate -f project.json
  3. Проверьте, что все обязательные поля заполнены (id, tasks, options.command)

Error: Circular dependency detected

Причина: Задачи зависят друг от друга циклически (A → B → C → A).

Решение:

  1. Проверьте цепочку зависимостей
  2. Удалите лишнюю зависимость
  3. Используйте триггеры вместо зависимостей

Проблемы с задачами

Задача сразу переходит в completed

Причина: Команда выполняется мгновенно (например, echo).

Решение: Это нормальное поведение для команд, которые завершаются сразу. Если нужен долгоживущий процесс, убедитесь, что команда не завершается (например, сервер должен оставаться запущенным).

Задача зависает в starting

Причина: Процесс не переходит в состояние started.

Решение:

  1. Проверьте, что процесс действительно запускается
  2. Проверьте логи: runium project status my-project
  3. Попробуйте запустить команду напрямую в терминале

Переменные окружения не применяются

Причина: Переменные не передаются в дочерний процесс.

Решение:

  1. Проверьте синтаксис макроса $env():
    json
    "env": {
      "MY_VAR": "$env(MY_VAR, default_value)"
    }
  2. Убедитесь, что .env файл загружен (опция --env)

Плагин установлен, но не работает

Причина: Плагин отключён.

Решение:

  1. Проверьте статус: runium plugin list
  2. Включите плагин: runium plugin enable <plugin-name>

Проблемы с профилями

Изменения не применяются

Причина: Используется другой профиль или файл .runiumrc.json переопределяет настройки.

Решение:

  1. Проверьте текущий профиль: настройки применяются из ~/.runium по умолчанию
  2. Проверьте наличие .runiumrc.json в текущей директории
  3. Явно укажите профиль: runium --profile ./my-profile project start

Отладка

Включение режима отладки

sh
runium --debug project start my-project

Или в .runiumrc.json:

json
{
  "output": {
    "debug": true
  }
}

Валидация конфигурации

Перед запуском проверьте конфигурацию:

sh
runium project validate -f project.json

Просмотр состояния проекта

sh
runium project status my-project