关于pm2:PM2-优雅退出

在日常开发过程中,常常会用到 pm2 来起到服务,甚至会用 watch 来实现热更新。 但下面这种模式并不适宜用在生产环境中,因为 pm2 零延时重启,会导致正在解决的申请间接被销毁,如果数据库没加事务,间接就会导致数据库的数据不残缺。 解决办法是延时 kill,参数是--kill-timeout。 在启动的app.js中增加SIGINT的监听,并在回调中用残余的timeout工夫解决数据。 process.on('SIGINT', function() { db.stop(function(err) { process.exit(err ? 1 : 0) })})启动形式如下: pm2 start app.js --kill-timeout 3000重载就会触发。 pm2 reload理论问题个别应用 pm2,咱们是心愿 pm2 给咱们提供负载平衡,每次 pull 好代码,reload 一下就能降级到最新的服务,而不须要从 Nginx 上下手。然而默认状况下 pm2 间接重启会导致正在解决的申请失落。所以咱们心愿 PM2 在重启前,能够先告诉 App,并给足够的工夫让 App 解决完正在解决的申请,并且不再接管新的申请,而后再重启服务。 咱们能够把下面的例子改成这样。 process.on('SIGINT', function() { global.app.running = false; db.stop(function(err) { process.exit(err ? 1 : 0) })})global.app.running为整个服务的全局变量,只有服务启动就赋值为true,并且在所有理由拦截器中减少判断逻辑:只有true时才接管申请,这样就能保障当global.app.running为false时,正在解决的申请不会被销毁,所有起初进入的申请都失败,从而保障数据库完整性。 然而这种拦挡形式太过于粗犷,只是保障数据库残缺,然而仍然达不到平滑,平滑降级还有很多路要走。 参考链接Graceful Stop

January 5, 2022 · 1 min · jiezi

关于pm2:PM2让Nodejs项目在服务器崩溃重启后能自启动

一、问题简介当服务器意外解体重启后,Node.js要可能自启动,复原服务。 二、解决方案1、三步实现# 1、创立启动脚本 pm2 startup# 2、下面命令会输入相似如下提醒,依照提醒执行[PM2] You have to run this command as root.Execute the following command: sudo su - c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v14.3/bin pm2 startup <distribution> -u <user> --hp <home-path> # 3、保留正在运行的利用到启动脚本 pm2 save# 当初能够重启服务器,看看 node.js 我的项目是否能自启动2、其余# 复原上一次保留的自启动列表 pm2 resurrect# 勾销自启动 pm2 unstartup# 当 node.js 版本更新时,请肯定要卸载并新建 自启动脚本 pm2 unstartup pm2 startup三、参考文档PM2让Node.js我的项目在服务器解体重启后,能自启动!

November 26, 2021 · 1 min · jiezi

关于pm2:PM2用配置文件管理多个Nodejs项目

一、问题简介有多个 Node.js 过程须要一起治理时,各自须要的参数也不同时,创立一个配置文件来治理是最好的计划。 二、解决方案1、生成根底版本配置文件pm2 init simple :能够生成根底版本的配置文件:ecosystem.config.js // ecosystem.config.jsmodule.exports = { apps: [{ name: "app1", script: "./app.js" }]}2、生成简单版本的配置文件pm2 init 等同于 pm2 ecosystem ,能够生成带有 deploy 属性的配置文件:ecosystem.config.js module.exports = { apps: [{ script: 'index.js', watch: '.' }, { script: './service-worker/', watch: ['./service-worker'] }], deploy: { production: { user: 'SSH_USERNAME', host: 'SSH_HOSTMACHINE', ref: 'origin/master', repo: 'GIT_REPOSITORY', path: 'DESTINATION_PATH', 'pre-deploy-local': '', 'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production', 'pre-setup': '' } }};此版本配置适宜近程配置服务器应用,实例查看这里!3、应用配置文件启动、进行、重启、重载、删除配置文件中所有我的项目 ...

November 26, 2021 · 1 min · jiezi

关于pm2:PM2用监控模式实时更新Nodejs项目

一、问题简介监控目录下所有文件,只有有文件更新就立即重启。 二、解决方案1、--watch监控我的项目目录下所有文件,任意文件有改变,就主动重启 node.js 我的项目。 # 1、装置 pm2 npm install pm2 @latest -g # or yarn global add pm2# 2、转到 node.js 我的项目根目录下 cd < 我的项目根目录 ># 3、用 pm2 启动 node.js 我的项目,我的项目目录下有文件改变就重启 pm2 start app.js--watch# 当初就能够失常拜访 node.js 我的项目了,且能够查看我的项目状态 pm2 list pm2 log2、--ignore-watch能够去除一些不须要监控的目录或文件。 # 监控除了 node_modules 目录以外文件 pm2 start app.js --watch --ignore-watch="node_modules"3、配置文件中设置监控的办法状况1:监控和疏忽具体文件 module.exports = { script: "app.js", // 监控这两个文件夹 watch: ["server", "client"], // 监控工夫距离 watch_delay: 1000, // 疏忽这两个文件夹 ignore_watch: ["node_modules", "client/img"],}状况2:监控我的项目目录下所有文件 module.exports = { script: "app.js", watch: true}三、restart 与 reload 区别restart 会杀掉现有过程 并 启动新过程,服务会中断;reload 不会杀掉现有过程,在现有过程从新加载,服务不会中断; ...

November 26, 2021 · 1 min · jiezi

关于pm2:PM2用环境变量隔离Nodejs项目的开发与生产环境

一、问题简介develop 和 production 运行的环境有很大差异,譬如两个环境下的数据库地址、用户名等都是不一样的,硬编码这些参数不是好的抉择,通过环境变量能够很好解决。 二、解决方案1、生成配置文件pm2 init simple // 生成默认配置文件:ecosystem.config.jsmodule.exports = { apps : [{ name : "app1", script : "./app.js" }]}2、增加环境变量配置// ecosystem.config.jsmodule.exports = { apps: [{ name: "app1", script: "./app.js", env: { "ip": "192.168.1.2", "NODE_ENV": "development" }, env_production: { "ip": "192.168.1.1", "NODE_ENV": "production", } env_develop: { "ip": "192.168.1.2", "NODE_ENV": "develop", } }]}3、调用环境变量env 默认环境变量,只有启动利用:pm2 start ecosystem.config.js ,那么 ip 变量就会被传递给利用 app1env_production 对应调用形式是:pm2 start ecosystem.config.js --env productionenv_develop 对应调用形式是:pm2 start ecosystem.config.js --env develop规定是 :配置文件中定义 env_ 结尾的属性,那么就用 --env 参数调用。4、--update-env : 更新环境变量NODE_ENV=production pm2 restart web-interface --update-env三、参考文档PM2用环境变量隔离Node.js我的项目的开发与生产环境!

November 26, 2021 · 1 min · jiezi

关于pm2:PM2用Cluster-Mode不用修改代码即可提升Nodejs项目性能

一、问题简介cluster mode 就是在单台服务器上,开启多个雷同 node.js我的项目 过程,独特解决网络申请服务,让 node.js我的项目 解决并发和响应速度达到最高性能。 二、解决方案法一:命令启动 # 启动多个 node.js我的项目过程(过程数量 = cpu核数量) pm2 start app.js -i 0法二:配置文件启动 // 1、配置文件(processes.json),设置如下module.exports = { apps: [{ script: "api.js", instances: "max", exec_mode: "cluster", // 开启过程间的负载平衡模式 }]}# 2、用配置文件启动 node.js 我的项目 pm2 start processes.json三、其余重要阐明1、-i 前面的数字阐明0/max :开启过程数量 == cpu核数量-1:过程数量 == cpu核数量 - 1四、参考文档PM2用Cluster Mode,不必批改代码即可晋升Node.js我的项目性能!

November 26, 2021 · 1 min · jiezi

关于pm2:PM2实时查看Nodejs项目的输出日志

一、问题简介只有通过PM2 启动的Node.js我的项目,能够十分不便的查看其输入日志。 二、解决方案1、常用命令# 显示所有利用的实时日志 pm2 logs# 显示 api 利用的日志 pm2 logs api# json格局显示所有利用的日志 pm2 logs --json# 显示1000行 big-api 的日志 pm2 logs big-api --lines 1000 # 用仪表盘显示所有利用 pm2 monit2、让输入日志加上工夫pm2 start app.js --timepm2 restart app --time3、默认日志的门路HOME/.pm2/logs4、查看日志命令的可用选项pm2 logs -h5、启动利用时,怎么初始化日志相干信息pm2 start app.js [OPTIONS]-l --log [path] specify filepath to output both out and error logs-o --output <path> specify out log file-e --error <path> specify error log file--time prefix logs with standard formated timestamp--log-date-format <format> prefix logs with custom formated timestamp--merge-logs 实用 cluster mode6、cluster mode 中,让所有过程日志都写进同一个日志# 命令启动,加上选项 pm2 start app.js -i max --merge-logs <具体日志文件># 配置文件中,设置属性: merge_logs: true7、不须要输入日志module.exports = { apps: [{ name: 'Business News Watcher', script: 'app.js', instances: 1, out_file: "/dev/null", error_file: "/dev/null", cron_restart: '0 0 * * *', [...] }]}8、革除日志# 革除所有利用的日志 pm2 flush# 革除 api 利用的日志 pm2 flush <api>9、日志文件的大小,以及日志保留多久等性能须要额定插件反对:pm2 install pm2-logrotatepm2-logrotate - 官网阐明三、参考文档PM2实时查看Node.js我的项目的输入日志!

November 26, 2021 · 1 min · jiezi

关于pm2:PM2安装方式及其常用命令

一、PM2 的基本操作命令1、pm2 装置pm2 的装置须要 node.js 的环境,npm 是 node.js 内置利用,怎么装置 node.js ,看这里!。 npm install pm2@latest -g# oryarn global add pm2# 更新 PM2 pm2 update2、pm2 装置目录# pm2装置目录 HOME/.pm2 # pm2运行日志,能够查看程序运行谬误 HOME/.pm2/pm2.log HOME/.pm2/pm2.pid# pm2 治理利用的日志目录 HOME/.pm2/logs # PM2 配置文件 HOME/.pm2/conf.js 3、启动利用# 反对不同文件格式 pm2 start app.js pm2 start bashscript.sh pm2 start python-app.py pm2 start binary-file pm2 start "npm run start" pm2 start "ls -la" pm2 start app.py# 设置启动利用的显示名称 pm2 start app.js --name <app_name># 监控利用目录,一旦有文件产生更改就立即重启利用 pm2 start app.js --watch# 设置利用重启时,能应用内存的最大值 pm2 start app.js --max-memory-restart <200MB># 启动时,传递参数给 app 利用 pm2 start app.js -- arg1 arg2 arg3# 禁止主动重启利用 pm2 start app.js --no-autorestart4、重启、重载、进行、删除pm2 restart app_name|app_id|allpm2 reload app_name|app_id|allpm2 stop app_name|app_id|allpm2 delete app_name|app_id|allpm2 restart app.jspm2 restart app1 app3 app4# 重置 restart 的计时器 pm2 reset all 5、查看运行状态# 查看所有过程信息(app_name、app_id等) pm2 [list|ls|status] # 对利用进行排序查看 pm2 list --sort name:desc # Or pm2 list --sort [name|id|pid|memory|cpu|status|uptime][:asc|desc] # 查看某个利用详情 pm2 describe app_name|app_id pm2 show api6、显示仪表盘在终端上显示仪表盘,展现所有利用的信息:cpu、内存、日志、运行状态等。 ...

November 26, 2021 · 1 min · jiezi

关于pm2:PM2变为文件共享服务器

一、问题简介用 pm2 能够起送开启一个文件服务器,共享文件。首先须要装置 pm2。pm2装置,看这里! 二、解决方案1假如 ~/test 目录下有一个 test.txt 文件 # 开启文件服务器,默认端口是8080,能够依据须要批改pm2 serve ~/test 8080# 浏览器拜访http://localhost:8080/test.text三、解决方案2假如 ~/test 目录下有一个 test.txt 文件 # 1、切换到共享目录cd ~/test# 2、新建配置文件 : ecosystem.config.jspm2 init simple# 3、批改配置文件为如下内容module.exports = { apps: [{ name: "serve", script: "serve", env: { PM2_SERVE_PATH: '.', PM2_SERVE_PORT: 8080 } }]}# 4、启动服务pm2 start ecosystem.config.js #或者pm2 start# 5、浏览器拜访http://localhost:8080/test.text四、解决方案3假如共享目录有index.html 文件,文件内容如下。访问共享目录时,默认关上 index.html <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>pm2 serve</title></head><body> <h1>Welcome</h1> <p>这是 pm2 服务器!</p></body></html>法一:命令启动 # 1、切换到共享目录cd ~/test# 2、启动服务pm2 serve --spa# 3、拜访http://localhost:8080法二:配置文件启动 # 1、切换到共享目录 cd ~/test# 2、新建配置文件 : ecosystem.config.js pm2 init simple# 3、批改配置文件为如下内容module.exports = { apps: [{ name: "serve", script: "serve", env: { PM2_SERVE_PATH: '.', PM2_SERVE_PORT: 8080, PM2_SERVE_SPA: 'true' } }]}# 4、启动服务 pm2 start ecosystem.config.js #或者 pm2 start# 5、浏览器拜访 http://localhost:8080五、解决方案4应用用户名和明码来拜访服务。 ...

November 26, 2021 · 1 min · jiezi

关于pm2:学习PM2从这里开始

一、PM2是什么?PM2是 node.js我的项目 的过程管理工具,罕用性能如下: 让 node.js我的项目 能在文件更新时主动重启;让 node.js我的项目 能在服务器异样重启后也能主动启动;能够试试查看 ndoe.js我的项目 的输入日志,曾经批改调整日志输入格局,加上工夫前缀等;让 node.js我的项目 部署在多台近程服务器上,且能实现我的项目版本自动更新公布等自动化操作;让 node.js我的项目 不扭转代码的状况下,开启多个过程晋升服务性能,还能让过程间实现负载平衡;二、一个简略实例1、怎么用 pm2 命令启动 node.js 我的项目?pm2 的装置须要用到 node.js 环境。怎么装置 node.js 看这里! # 1、装置 pm2 npm install pm2@latest -g# 2、转到 node.js 我的项目根目录下 cd <我的项目根目录># 3、用 pm2 启动 node.js 我的项目 pm2 start app.js # 当初可用浏览器失常拜访 node.js 我的项目了,且能够查看我的项目状态 pm2 list pm2 log三、具体应用场景1、PM2 常用命令装置、启动、进行、查看过程信息等罕用操作阐明。详情,看这里! 2、查看日志查看 pm2 治理的 Node.js 过程,输入的日志信息(包含谬误日志)。详情,看这里! 3、配置文件治理利用用配置文件治理多个 Node.js 我的项目,轻松不便!详情,看这里! 4、进步 Node.js 性能不必批改代码,就能够进步 Node.js 我的项目解决并发和响应速度的性能。详情,看这里! 5、近程自动化部署一句命令,能够让多台服务器同时下载git仓库代码 并编译更新,主动公布 Node.js 我的项目。详情,看这里! ...

November 26, 2021 · 1 min · jiezi