代替forever下一个部署node的持久化工具---pm2

最近有个后端项目,用的是node,在持久化的时候会挂掉,详细了解到用的是nohup,然后先详细了解了一下nohup

nohup是一个Linux命令,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行1nohup的英文全称是no hang up(不挂起)。

nohup为什么不稳定,可能有以下几个原因:
1.nohup命令只能保证程序在后台运行,但不能保证程序不会因为其他原因而终止,比如内存不足、程序异常、系统重启等。
2.nohup命令在默认情况下(非重定向时),会输出一个名叫nohup.out的文件到当前目录下,如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中
3如果这些文件被删除或者磁盘空间不足,可能会导致程序无法正常输出或者崩溃。
4.nohup命令在执行时,会将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null设备中,避免被关闭终端的信号所中断,但是,如果程序需要从标准输入读取数据或者向标准输出和标准错误输出写入数据,那么nohup命令可能会造成程序阻塞或者异常。

解决思路:

这个时候我想到了forever,因为之前碰到类似的问题,也写文章写了如何安装,但是在安装完之后碰到过一个问题,就是这个问题,但是当我安装完运行的时候报错如下

在这里插入图片描述

报错信息

(node:9352) Warning: Accessing non-existent property ‘padLevels’ of module exports inside circular dependency

找到了相关的解决方案是说这个错误是因为 Node.js 中存在循环模块依赖,导致在解析模块过程中访问了未定义的属性,node在高于node14以后就不支持循环依赖,所以会报错,如果切换node版本低于14或者12就不会有这个问题,但是,因为项目的版本是node16,所以切换版本是不可能的, 所以解决方案要么就是解决掉循环依赖的问题,要么就是换其他的持久化工具,综合条件下我选择了第二种,切换持久话工具,那就是pm2

PM2介绍

PM2 是一个守护进程管理工具,帮助您管理和守护您的应用程序。它以简单直观的 C​​LI 命令行方式进行工作。当然,pm2还有一个非常好用的功能就是开机自启动程序

1.安装pm2

上传文件到/home/tool/pm2 目录下,这个可以自己决定到那个目录,但是下面的路径需要和安装的路径保持一致,当然简单安装就是

npm install pm2 -g

但是问题就是重启之后pm2的环境变量就不见了,当然也有可能是个例,所以我选择了下面的安装方式

解压

tar -xvf pm2-5.2.2.tar
```3D&pos_id=img-Pg1mWqtc-1693447847522)创建软连接```javascript
ln -s /home/tool/pm2/pm2-5.2.2/bin/pm2 /usr/local/bin/pm2

2.执行pm2查看输出

安装完成后,在任何地方输入pm2会打印下面的信息

pm2

pm2执行

3.在程序的根目录下执行

cd  /home/20230809

启动程序

pm2 start ./src/app.js --silent       //--silent表示不需要日志,但是还是可以看到日志,奇怪

在这里插入图片描述

然后执行 ,看到status为 online表示当前为在线

 pm2 ls

前台访问是正常的
在这里插入图片描述

常用维护命令:

停止所有的程序:

pm2 stop all

重新启动所有应用:

pm2 restart all

查看日志:

pm2 logs

在这里插入图片描述

更多的功能请访问官网了解

pm2中文官网

安装包地址

链接: https://pan.baidu.com/s/1XbeL48bGgR2oM14Uc9VCKw

提取码: xxxq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/60878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于RabbitMQ的模拟消息队列需求文档

文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列? 消息队列就是,基于阻塞队列,封装成一个独立的服务器程序&#…

Nginx百科之gzip压缩、黑白名单、防盗链、零拷贝、跨域、双机热备

引言 早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业…

three.js渲染带动画的glb文件

1. 准备工作 将下列文件在three.js的包中找到,注意的是我这里使用的是模块化版本的,这里不知道模块化的,可以先去看一下es6的模块化。 控制器: OrbitControls.js 加载器:GLTFLoader.js 材质: RoomEnvironm…

golang字符串转Uint16

switch params[index].ParameType {case 10: //10数值(Byte)params[index].ParameByte []byte{byte(xtools.InterfaceToInt(params[index].ParameValue))}case 15: //15Bytesparams[index].ParameByte, _ hex.DecodeString(params[index].ParameValue)case 20: //20ASCIIpara…

数据时代的必备利器:数据可视化工具的崭新价值

在当今信息时代,数据扮演着越来越重要的角色,而数据的可视化呈现正是一种强大的工具,能够帮助我们更好地理解和利用这些数据。虽然Excel和PPT在处理数据方面有着不可否认的作用,但在处理大规模、复杂数据时,数据可视化…

微信小程序 基于Android的美容理发师预约管理系统

,本系统主要根据管理员、用户及理发师的实际需要,方便用户利用互联网实现对商品信息进行立即订购,同时让管理者可以通过这个系统对用户实际需求以及各信息进行管理。设计该系统主要目的是为了方便用户、理发师可以有一个非常好的平台体验&…

文心一言 VS 讯飞星火 VS chatgpt (84)-- 算法导论8.2 1题

一、用go语言,参照图8-2 的方法,说明 COUNTING-SORT 在数组 A(6,0,2,0,1,3,4,6,1,3,2)上的操作过程。 文心一言: Counti…

Spring retry(二)- 源码解析-启动装配篇 @EnableRetry

上一篇文章,我们快速介绍了下spring-retry的使用技巧,本篇我们将会剖析源码去学习 一、 EnableRetry注解 Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) EnableAspectJAutoProxy(proxyTargetClass false) Import(RetryConfiguration.c…

现货黄金走势图中的止盈点

对平仓时机的把握能力,是衡量现货黄金投资者水平的重要标志,止盈点设置得是否合理,在行情兑现的时候能否及时地离场,是事关投资者账户浮盈最终能否落袋为安的“头等大事”,要在现货黄金走势图中把握止盈点,…

Linux-安装redis6.2.1及主备复制模式(replication)

Linux-安装redis6.2.1 下载redis6.2.1资源上传至安装目录解压及编译解压修改名称编译 修改配置文件主节点从节点 启动及测试启动主节点从节点 测试 下载redis6.2.1资源 地址》https://redis.io/download/ 上传至安装目录 例:/data/replication/ 解压及编译 解…

网络编辑的选择能力

以往的网络编辑给人的印象就是个信息搬运工,日常的工作就是从合作媒 体的网站上拷贝新闻,然后粘贴在发布系统中,唯一做的有点儿创造性的工作就是 根据字数要求做一个吸引人的标题就行了。这样的工作还谈不上具备媒介素养,因 为…

【kubernetes系列】Calico原理及配置

概述 Calico是针对容器,虚拟机和基于主机的本机工作负载的开源网络和网络安全解决方案。 Calico支持广泛的平台,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸机服务。 Calico在每个计算节点都利用Linux Kernel实…

DP4863 国产双声道音频功率放大器芯片

产品概述: DP4863 电路是一种双声道桥接音频功率放大器。在 5 V 电源电压下,它能向 4 Ω 负载提供 2.2 W 的输出功率,或向 3 Ω 负载提供 2.5 W的输出功率,THD N 小于 1 %。此外,它还具有耳机输入端,可驱…

《Go 语言第一课》课程学习笔记(十四)

接口 认识接口类型 接口类型是由 type 和 interface 关键字定义的一组方法集合,其中,方法集合唯一确定了这个接口类型所表示的接口。type MyInterface interface {M1(int) errorM2(io.Writer, ...string) }我们在接口类型的方法集合中声明的方法&#…

博士后申请有哪些技巧?

在博士后申请过程中,有一些关键的技巧可以帮助申请者提高成功的机会。以下是知识人网小编的一些建议: 1.精选合适的导师和研究课题:选择与自己研究方向相关且感兴趣的导师和课题非常重要。导师的声誉、研究成果和合作风格都会影响你的博士后经…

Java写作的规范篇(一)

为什么要写下此篇? 首先在我日常的开发中,总是感觉自己在使用一种面向对象的语言然后在面向过程编程。代码中十分不规范,虽然意识到了这个问题。但是想要解决还是需要花费很多的思路去构思如何像写一篇优雅的作文一样写一篇优雅的程序代码。话…

智慧工地源码带开发手册文档 app 数据大屏、硬件对接、萤石云

智慧工地解决方案依托计算机技术、物联网、云计算、大数据、人工智能、VR、AR等技术相结合,为工程项目管理提供先进技术手段,构建工地现场智能监控和控制体系,弥补传统方法在监管中的缺陷,最终实现项目对人、机、料、法、环的全方…

一、设计模式概述-设计模式概述

一、什么是设计模式 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解…

黑马程序员上课笔记 P2 JAVA 前置课CMD的使用

引入: 一、人机交互 人机交互的故事: 计算机刚出现的时候的三个特点,占地广 造价高 耗电多 故事: 在计算机的历史中,人机交互(Human-Computer Interaction,简称HCI)一直在不断地…

Python:使用Resend发送邮件

官网&#xff1a;https://resend.com/ 很简单&#xff0c;只需调用api接口&#xff0c;即可发送邮件 需要提前准备好参数 api_key 从Resend申请的keyto_email 接收邮件的邮箱地址 import requestsheaders {Authorization: Bearer <api_key>,Content-Type: applicati…