pm2如何让进程正常结束后不拉起 而意外中断可以拉起来
发布于 6 年前 作者 Purplekylin 3874 次浏览 来自 问答

RT,pm2有这么个参数么?

12 回复

有啊,看官方文档

pm2 是守护进程的,如果想正常结束,再用pm2关掉就好了啊

@yilikun 我这边的进程任务 是一个要跑很长时间的 具体能在什么时间结束我自己也无法确定 可能在深夜而且我也不想时时关注它。所以为了防止因为意外挂掉使用pm2 也采取了措施让进程重新拉起后可以接着上次的任务运行而不会重新开始。但 当任务结束 我希望它能自己关掉。 现在的问题是进程结束后 pm2会拉起来 然后又重新开始跑一遍。

@zengming00 查过 没找到

@yilikun 现在有个解决的办法 是在完成任务后 进程即将关闭前 起一个setInterval 让进程无法结束 但这个有点坑。而且 如果出现这个进程因为意外被关掉 又会被拉起来重新跑一遍(虽然概率有点低)

感觉这个有点悖论了,第一,像这种脚本应该要保证它的健壮性。第二,我不知道pm2是否有办法甄别这个脚本是因为意外结束了,还是正常执行完了,可以往这个方向去搜索一下。第三,可以试试node自带的的结束进程的方法,在脚本末尾处调用progress.exit()

我去看了一下,还真没有,你可以写个文件来标记一下嘛

@zengming00 标记是有的 不过这个标记的作用是 当任务进行中 挂掉被拉起来 可以接着之前的任务跑 中间随意的pm2 restart 也是一样接着跑。 当任务完成后 标记改变 这时候我希望 程序自己关掉 当我再使用pm2 restart 的时候可以从新开始任务 本来这里如果pm2不拉起 那么会很顺利 但被拉起了 程序也直接开始从头跑。

exit(退出码) 不行吗? 实在不行就执行一下pm2 delete

[CNodeMD]

@dbit-xia progress.exit() 不起作用 会被重新拉起,至于执行pm2命令 主要就是我不想依靠我手动执行pm2 stop 命令 毕竟我不可能准确把握到进程正常结束的时间 而在下一轮开启之前把pm2守护进程关掉。 现在看来基本只能设置autorestart: false把拉起功能关掉了,虽然一般来说不会出问题 但感觉上就不是很完美

@Purplekylin 我的意思是用node执行pm2 delete name ~~

回到顶部