一、运行环境

项目使用vue版本:vue3.0; 服务器系统镜像:Alibaba Cloud Linux 3.21.04; node.js版本:v18.15.0; npm版本:v9.6.2; 终端连接工具:FinalShell 3.9.8.2。

二、问题复现

将vue项目上传至阿里云服务器中,使用cd命令进入项目所在文件夹中, 再使用nohup npm run serve > /opt/log/vue.log 2>&1 & 命令让Vue项目持续在后台运行 此时Vue项目已经运行成功,通过浏览器输入地址已经可以正常访问。但是通过ps -axj命令查看进程信息(如下图),图中java后端已通过nohup命令转为守护进程可在终端关闭后继续运行(PTGID为-1时,表示该进程为守护进程),但是npm运行的前端并没有转为守护进程。 查询了很多网上的教程,有说把nohup加入到 ~/.bash_profile中,尝试后依然失败。我后来在无意间的一次操作中实现了长时间后端运行。

三、解决方法

其实方法非常简单,就是通过npm运行项目后,ps -axj 查看到npm运行的PPID为824829,使用kill -9 824829 销毁npm进程的父进程即可。 运行命令后终端连接会断开,然后再次回车,终端会再次连接。此时再次使用 ps -axj命令查询进程信息(如下图)会发现npm运行的进程奇迹般转为了守护进程。关闭终端后,再使用浏览器访问前端项目也不会无法访问了,至此问题解决。

四、后记

出现这个问题的原因没有找到,解决这个问题的方法原理也没有弄清楚,完全就是瞎猫撞上死耗子,有Linux大佬知道这其中的原理,请私聊我,本菜鸟真诚求教。

2023-08-17 补充: 根据评论区大佬 网络老男孩了 的方法,cd到vue项目目录下,执行 “nohup npm run serve > /opt/log/vue.log 2>&1 &” 后台运行的命令,待启动完毕后,再执行 “exit” 命令。此时会发生我文章里说的kill npm 父进程一样的效果,终端连接会断开,然后再次回车,终端会再次连接。用 ps -axj命令查看vue项目进程发现也实现了长期运行。亲测有效,感谢大佬提供的简便方法。

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。