重新加载或重新启动Vagrant时PM2出错

时间:2016-02-29 10:49:20

标签: vagrant virtual-machine pm2

我正在使用vagrant机器和pm2。我使用以下方法创建了启动脚本:

pm2 update ubuntu

然后通过

转储所有正在运行的进程
pm2 save

然而,当我通过流浪汉重装加载流浪汉机器。所有过程都具有以下状态:

enter image description here

如果我使用

更新它
pm2 update

所有流程都会重新上线。如果我杀死并复活所有过程,即使再回到网上也是如此。 只有当流浪汉重新启动时才会出错。

PM2日志提供以下错误

Error: spawn node ENOENT
at exports._errnoException (util.js:856:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:179:32)
at onErrorNT (internal/child_process.js:345:16)
at nextTickCallbackWith2Args (node.js:455:9)
at process._tickDomainCallback (node.js:410:17)

我已经尝试了所有可能的解决方案,到目前为止,我没能工作。

注意:重新启动主机Ubuntu计算机时,相同的步骤可以正常运行。

2 个答案:

答案 0 :(得分:0)

所以,我在寻找同样的问题时发现了这个问题。最后我意识到问题是在Vagrant挂载共享目录之前,PM2启动脚本正在执行。因此,PM2在重新启动时无法找到您的脚本。这就是为什么它在Vagrant完成后你可以使用SSH并重新运行PM2的原因。到那时,Vagrant已经重新安装了您的共享目录。我发现解决此问题的一种方法是使用rsync,这样重启时文件就已经在VM上了。

答案 1 :(得分:-1)

正如Jason的回答所说,这是由加载和挂载共享目录的顺序引起的。

基本解决方案是使用vagrant的shell配置,通过向您的vagrant文​​件添加类似于以下内容的东西(在您处理挂载共享目录的部分之后):

config.vm.provision :shell, :inline => "pm2 start /vagrant/project/server/index.js && pm2 startup", :run => 'always', privileged: false

这将导致Vagrant在调用vagrant up时运行此行,这由:run => 'always'选项保证,这意味着它始终运行,而不仅仅在vagrant provision上运行config.vm.provision

的默认设置

来源:PM2 on vagrant - starting app AFTER shared folder is mounted