在我的ec2实例中,我能够运行pm2
命令。
但是,在通过代码部署部署应用程序时,我会得到这个错误。
stderr/opt/codedeploy-agent/deployment-root/878477e5-6ffb-4175-8e9e-97045ea99290/d-HVRQ58IBL/deployment-archive/application_stop.sh: 4行:
LifecycleEvent - ApplicationStop脚本- application_stop.sh stdoutStopping现有节点服务器
我的application_stop.sh代码。
#!/bin/bash
#Stopping existing node servers
echo "Stopping any existing node servers"
pm2 stop main
我使用pm2命令检查了我的which pm2
路径,并返回了
~/.nvm/versions/node/v16.15.1/bin/pm2
之后,我使用下面的命令更新我的application_stop.sh
~/.nvm/versions/node/v16.15.1/bin/pm2 start main
还添加了这样的符号链接到npm,节点和pm2。
/这一进程起了作用。谢谢@ranjanistic
which npm
which node
which pm2
sudo ln -s /home/ec2-user/.nvm/versions/node/v16.15.1/bin/npm
sudo ln -s /home/ec2-user/.nvm/versions/node/v16.15.1/bin/node
sudo ln -s /home/ec2-user/.nvm/versions/node/v16.15.1/bin/pm2
仍然不起作用
发布于 2022-11-29 02:56:28
对命令的二进制可执行引用需要在您希望从其运行的环境中可用。
您正在使用npm运行pm2命令,这意味着它是作为本地模块安装的。因此,您可以使用npm run stop:all
命令创建另一个类似于pm2的npm脚本,它应该可以工作。
如果您在bash脚本中运行它,那么命令引用二进制应该在PATH
中可用。或者,您也可以使用命令,例如,使用它的二进制路径而不是名称,而不依赖于二进制文件所在的位置。
如果pm2是作为全局节点模块安装的
/usr/bin/pm2 stop main # or whatever the path to the binary is.
或者如果pm2作为节点模块安装在项目中,那么
./node_modules/bin/pm2 stop main # again, path to pm2 binary can be anything, you'll have to know beforehand
此外,我建议为每个pm2应用程序提供一个单独的配置文件,这样您就可以在任何地方使用它,而不必担心main
应用程序是否可供pm2使用。
您还可能需要检查npm
或node
命令是否正在运行,在运行部署之前,您可以在$PATH
变量中添加包含pm2的文件夹的路径。如果pm2可用,可以使用which pm2
手动检查它的路径。
发布于 2022-11-28 02:55:05
您需要提供这样的绝对路径:/usr/bin/pm2 2
https://stackoverflow.com/questions/74599468
复制相似问题