无法从 init.d 服务内部运行 NPM

无法从 init.d 服务内部运行 NPM

我有一个 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

相关内容