本人属于菜鸟额,接触node有半年了,最近项目需求,需要将node代码设置成开机自启动,于是经人推荐使用了pm2模块,发现的确很好用,很方便,它提供的API很完善。最近一直在测试代码的稳定性,在测试过程中,发现用pm2启动node代码时,有时候pm2会将一个demo启动两遍,即在pm2图形化界面上,会看到一个程序有两个进程号,这很影响我的服务端处理逻辑。 虽然我知道pm2中,的确可以启动多个进程,但是那也是需要指定的吧。我只是pm2 start app.js,并没有指定个数,为什么还会出现启动多遍的问题呢。很困惑,最近项目很急,希望各位大神指点一下啊,小弟先谢过了。 ps:以下是我用pm2设置开机自启动的步骤。 1.pm2 start app.js 2.pm2 save 3.pm2 startup
![(Y4XE{Q$Y8CYJ]S@_T1E{76.png](//dn-cnode.qbox.me/Fk5rLS_iXYDAfuM7z4oqajOPRkaC)
留言,有时间再看。
@NameJie 感谢!
@xia123zheng 你 pm2 startup 应该有生成一个文件,把那个文件的内容贴一下。
centos7 suse12+可以参看这个https://cnodejs.org/topic/57d8ebab5710e2ed658d6b2e
启动时可以使用pm2 start app.js -x就不会使用cluster模式,而是用fork单线程模式了
还是贴下你的pm2 l截图吧,你描述的还是不清晰,不确定两个进程是什么意思。
@IchiNiNiIchi 嗯,在/etc/init.d下生成了一个名为pm2-init.sh的文件。文件内容如下图:![]TCMLU(X{OA4H$
2Z46ZJH.png](//dn-cnode.qbox.me/Fp49MB2BSu7CeJiEruR6tk0LDpbJ)![KPJ)(BVWH9{FBNP0NV(FZN.png![WXRX35)55DT%AMRUT~FH0Q.png
@xia123zheng 第一步 pm2 start app.js 改成 pm2 start app.js -x
@haozxuan一楼有截图
@fhawk感觉,这两种方式差别不大啊。都是fork模式
@fhawk 我现在在按你说的,运行程序,目前暂时还没出现问题。
@xia123zheng pm2 默认会使用-i 0 cluster模式~
@fhawk 原来如此,我再调试几天,看看有没有啥问题。
@fh试过了pm2 start app.js -x,一段时间后还是会起两遍
@xia123zheng 建议带上启动模式,之前默认启动是fork,后来不知道什么时候改了。使用fork启动就clean了
@haozxuan 我现在用的是pm2 start app.js -x,启动模式是fork,刚开始运行不会出现代码起两遍的情况,重启几次系统后,就会出现代码起两遍的情况。应该怎么解决呢
@haozxuan 现在pm2图像界面显得是fork模式,但还是会起两遍
@xia123zheng 从你的描述看起来,你启动的没有问题,只是你保存的系统重启后的自启动仍旧是cluster模式,所以可以在fork模式成功启动后,重新save下;
@haozxuanfork模式成功后,save了,然后重启测试,第一次重启,没有发现问题,但是第二次重启就出了起两遍的问题,第一遍和第二遍之间没有设计pm2的操作。不知道怎么就这样了
@fhawk pm2可以设置不让其自动重启吗,就是没有自动restart的功能
用pm2和forever都出现了代码起两遍的问题,还是没有解决,最后采取的解决方案,有两种: 1.放到/etc/init.d目录下,以服务的方式,开机自启动node代码,的确是可以的,但是只能开启一个node代码,不知道什么原因。开启多个代码就会报错。 2.可以放到桌面启动里面,也可以实现开机自启动,但是也有弊端,一是,看不到打印信息,无法debug;二是,程序荡掉后,不能自启动,只能手写一个开门狗。
删除老的启动脚本,删除dump.pm2 重新生成启动脚本~~
@xia123zheng 建议删除/root/.pm2目录 删除创建好的启动脚本 然后重启 重新执行并生成pm2启动脚本~~~
@fhawk 测试过,还是不行哎。我自己写了一个看门狗,解决了开机自启动的问题。