某些背景
我有一个在机器人上运行的Web应用程序。这是一个Web应用程序-用于API / http服务器的node.js,React的前端是webpack。它与AWS IoT核心对接以运行作业,更新等。这部分工作正常。机器人开启后,该应用程序会在Chrome中以信息亭模式打开。为此,我有一个systemctl服务,该服务运行可启动所有内容的节点脚本。
问题:
我有一个在我的应用程序正在监视的AWS IoT Core中创建的工作。它用于软件更新(尤其是构建应用程序的前端)。该应用程序意识到有一个新任务要执行,并下载一个名为deploy.sh的文件,然后尝试通过运行bash deploy.sh
来执行它。与物联网的连接很好-它成功下载并尝试运行它。问题是它无法执行。脚本如下所示:
#!/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
一样启动它时,它就可以工作。它还给了我关于Node 4.2.6的错误消息,所以我知道它没有加载正确的消息。我已经使用nvm安装了8.11.1
。这是我package.json中的脚本部分:
"scripts": {
"webpack": "webpack",
"build": "npm run webpack -- --env.mode production --env.presets clean"
}
env.mode production
就是webpack使用的所有东西。
TL; DR
当我从脚本运行yarn build
时,它找不到webpack二进制文件-换句话说,当我从package.json中运行的npm脚本(webpack)从节点过程中下载的脚本中运行时,始于systemctl-无法解析路径。
我尝试过的事情:
./deploy.sh
代替bash deploy.sh
.bashrc
bash deploy.sh
-效果很好。仅当我从以systemctl开始的节点进程中调用它时。如果我通过输入node app.js
来启动节点,那么它将起作用。 我的信息: