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

Vagrant 重新加载或重新启动流浪者时PM2出错,vagrant,virtual-machine,pm2,Vagrant,Virtual Machine,Pm2,我使用的是流浪机器和pm2。我使用以下方法创建了启动脚本: pm2 update ubuntu 然后将所有正在运行的进程 pm2 save 然而,当我重新装填流浪者机器时,流浪者重新装填。所有流程都具有以下状态: 如果我用 pm2 update 所有的过程都会重新上线。如果我杀死并恢复所有进程,那么也可以重新上线只有当流浪者重新启动时,才会给出错误。 PM2日志给出了以下错误 Error: spawn node ENOENT at exports._errnoException (uti

我使用的是流浪机器和pm2。我使用以下方法创建了启动脚本:

pm2 update ubuntu
然后将所有正在运行的进程

pm2 save
然而,当我重新装填流浪者机器时,流浪者重新装填。所有流程都具有以下状态:

如果我用

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机器重新启动时,相同的过程可以完美地工作。

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

正如Jason的回答所述,这是由加载和装载共享目录的顺序造成的

基本解决方案是使用vagrant的shell配置,方法是在vagrant文件中添加类似于以下内容的内容(在处理装载共享目录的部分之后):

config.vm.provision:shell,:inline=>“pm2启动/vagrant/project/server/index.js&&pm2启动”,:run=>“始终”,privileged:false

这将导致Vagrant在调用
Vagrant up
时运行此行,这是由
:run=>“always”
选项保证的,这意味着它将一直运行,而不仅仅是在
Vagrant provision
上运行,后者是
config.vm.provision


来源:

关于这个问题有什么消息吗?我也有同样的问题。在这个问题上花了很多时间,但找不到满意的答案。如果你能找到答案,请告诉我。我也有这个问题。