Некоторые предыстории:
У меня есть веб-приложение, работающее на роботе.Это веб-приложение - node.js для API / http-сервера, React построен с веб-пакетом на передней панели.Он взаимодействует с ядром AWS IoT для выполнения заданий, обновлений и т. Д. Эта часть работает нормально.Приложение открывается в Chrome в режиме киоска при включении робота.Для этого у меня есть служба systemctl, которая запускает скрипт узла, который запускает все.
Проблема :
У меня есть задание, которое я создаю в AWS IoT Core, которое мое приложениенаблюдает за.Он предназначен для обновлений программного обеспечения (особенно для создания внешнего интерфейса приложения).Приложение понимает, что есть новое задание для выполнения, и загружает файл с именем deploy.sh, а затем пытается выполнить его, запустив bash deploy.sh
.Связь с IoT в порядке - он успешно загружает его и пытается запустить.Проблема в том, что он не выполняется.Вот как выглядит скрипт:
#!/bin/bash
APP_DIR=/homepath/to/the/app
GIT_URL=https://git/repo/link/to/project.git
# pull latest code
if [[ -e $APP_DIR ]]; then
cd $APP_DIR
git stash
git pull $GIT_URL master
else
git clone $GIT_URL $APP_DIR
cd $APP_DIR
fi
# Install prod dependencies
yarn install --quiet --non-interactive > "/dev/null" 2>&1
# Build & Restart application
yarn build --quiet
Команды git
отлично работают здесь и выводят код.Вот результат:
Error: Command failed: bash deploy.sh
From https://git/repo/link/to/project.git
* branch master -> FETCH_HEAD
warning You are using Node "4.2.6" which is not supported and may encounter bugs or unexpected behavior. Yarn supports the following semver range: "^4.8.0 || ^5.7.0 || ^6.2.2 || >=8.0.0"
warning package.json: No license field
error Couldn't find the binary npm run webpack
Я знаю, что проблема в том, что я запускаю сервер узлов с помощью systemctl, поэтому он не может найти все команды в PATH, потому что он работает, когда я только начинаюэто как node app.js
.Это также дает мне это сообщение об ошибке об узле 4.2.6, поэтому я ЗНАЮ, что он не загружает правильное.У меня 8.11.1
установлен с помощью nvm.Вот сценарий из моего package.json:
"scripts": {
"webpack": "webpack",
"build": "npm run webpack -- --env.mode production --env.presets clean"
}
env.mode production
- это все, что используется веб-пакетом и работает.
TL; DR
Когда я запускаю yarn build
из моего скрипта, он не может найти двоичный файл веб-пакета - другими словами, когда я запускаю скрипт npm (веб-пакет) из моего package.json из скрипта, который я скачал во время запуска процесса узлас systemctl - он не может разрешить пути.
То, что я пробовал:
- глобальная установка веб-пакета
- используя
./deploy.sh
вместо bash deploy.sh
- sourcing
.bashrc
в моем сценарии - , изменяя мои сценарии package.json для использования абсолютных путей к каталогу node_modules / .bin
- вызов
bash deploy.sh
прямо из командной строки - это прекрасно работает.Это только когда я вызываю его с узла, процесс запускается с systemctl.Если я запускаю узел, набирая node app.js
, то он работает.
Моя информация:
- ОС: Ubuntu 16.04.5LTS
- Узел: v8.11.1