我有一个 Node.js 应用程序,我正尝试将其作为 init.d 服务运行/停止(由于我使用的是 WSL2,因此我没有使用 systemd)。
我也在使用 NVM,因此 node/npm 存在于我的用户文件夹中/home/jlcarveth/.nvm/verions/node/v18.2.0/bin/...
我的初始化脚本现在非常简单,我尝试 cd 到我的源代码和 package.json 所在的目录,然后npm install
运行npm run
。
exec: npm: not found
但是,即使我明确链接到 npm 二进制文件,也总是会出现错误。
我的 init.d 脚本:
export NODE_PATH=$NODE_PATH:/home/jlcarveth/.nvm/versions/node/v18.2.0/lib/node_modules
export NPM_PATH=$NPM_PATH:/home/jlcarveth/.nvm/versions/node/v18.2.0/bin/npm
export INSTALL_DIR=/opt/express-proxy
PROXY_LOG=/var/log/express-proxy/proxy.log
ERROR_LOG=/var/log/express-proxy/error.log
case "$1" in
start)
cd $INSTALL_DIR
exec $NPM_PATH install
exec $NPM_PATH run dev 1>>$PROXY_LOG 2>>$ERROR_LOG
;;
stop)
echo "Received shutdown signal from init.d. Exiting." >> $PROXY_LOG
kill $(ps aux | grep 'eproxy' | awk '{print $2}')
;;
esac
exit 0
答案1
为了解决这个问题,我创建了 node 和 npm 的符号链接/usr/local/bin
:
sudo ln -s $(which node) /usr/local/bin
sudo ln -s $(which npm) /usr/local/bin
我还在脚本开头添加了 PATH 声明:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin