Почему запуск службы через скрипт yarn из pm2 приводит к сбою?

#yarnpkg #pm2 #serve

Вопрос:

Я настраиваю несколько сценариев DevOps для развертывания многокомпонентной системы.

Текущая настройка. Один компонент содержит несколько статических файлов, обслуживаемых serve -s build -l 3000 . Если быть более точным, это пакет в монорепо, и в его пакете.json есть скрипт "serve": "serve -s build -l 3000", . Вместо того , чтобы запускать его непосредственно из папки ( yarn serve ), он запускается из пакета monorepo.json как "serve-this-component": "yarn workspace this-component serve", , так что на самом деле yarn serve-this-component используется.

То, что я пытаюсь сделать. yarn serve-this-component включает вывод на консоль, поэтому , чтобы он работал в фоновом режиме, я хочу использовать pm2 , что уже используется для других компонентов. Я пытаюсь реализовать это, в основном, с помощью

 pm2 start yarn --name "ThisComponent" -- serve-this-component
 

Проблема. Неожиданно это не удается: пока yarn serve-this-component работает, команда выше не запускает сервер. Если я открою pm2 logs "ThisComponent" , я увижу следующую ошибку, повторенную несколько раз:

 SyntaxError: missing ) after argument list
    wrapSafe (internal/modules/cjs/loader.js:1054:16)
    at Module._compile (internal/modules/cjs/loader.js:1102:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
/usr/share/yarn/bin/yarn:2
argv0=$(echo "$0" | sed -e 's,\,/,g')
        ^^^^
 

Это похоже на проблему с выводом, так как он пытается echo что-то сделать, но pm2 обычно хорошо обрабатывает вывод, что видно через pm2 logs . Есть идеи, как это исправить?