目前Nodejs开发中有很多痛点,其中有一个是修改完代码以后需要我们重启服务才能看到效果。这样一次次的杀进程、重启,杀进程、重启很让人头大。程序员是最痛恨重复工作的物种,之前有了解过的同学可能知道 forever 。 forever 可以帮我们解决上面的问题,通过对资源变化的检测做到变化后自动重启。开发阶段我们使用 node file.js 来启动另外由于Nodejs的单线程,任何异常都会导致整个服务中断,这对于生产上长时间提供服务的程序来讲是不可以的, forever 可以帮我们在异常后重启,保证服务一直在线,我想这也就是它名字的由来吧。但我想说的是 forever 不够“高!大!上!”。接下来我要介绍一个足够高大上的神器– pm2

简介

pm2 = P (rocess) M (anager)2,是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡。它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理、监控功能。并且使用起来非常简单。下面我将把我的使用过程分享出来,Nodejs应用是一个基于Express 4.x的应用,名称是 Wolverine 。

安装

环境清单:

  • windows7 x64
  • node v5.0.0
  • npm 3.3.6

全局安装 pm2

$ npm install pm2 -g

更新

$ pm2 update

启动

直接启动的命令: pm2 start *** --watch (修改名称 --name="")

以前启动 Wolverine 是利用package.json的 scripts 来实现的,只需要执行 npm run start 就可以启动,配置如下:

"scripts": {
"start": "node ./bin/www",
"debug": "node debug ./bin/www" },

使用 pm2 我们可以在start处配置成 pm2 ./bin/www ,命令后面支持加参数来实现watch、cluster多进程模式等功能。我不太喜欢一大串的命令,于是我使用了配置文件的方式。

在 Wolverine 的根目录,我创建了一个 processes.json 配置文件,配置文件内容如下,注释写的也很清楚了

{
"apps" : [{
"name" : "Wolverine", //名称
"script": "./bin/www", //程序入库
"cwd": "./", //根目录
"watch":[
"bin",
"common",
"configs",
"public",
"routes",
"views"
],//需要监控的目录
"error_file":"./logs/app-err.log",//错误输出日志
"out_file":"./logs/app-out.log", //日志
"log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式
}]
}

随后,我在package.json中增加了一条

"pm2": "pm2 start processes.json"

在启动就直接输入如下命令就好:

$ npm run pm2

看到下面的界面,就启动成功了,然后我们就可以关掉这个窗口了,服务不会因此停止,是不是高大上多了。

管理和监控

启动成功的界面会展示App name和id,这两个值很重要。当然这两个值都可以在processes.json配置文件进行配置。

打开命令行,在任何路径下,输入

$ pm2 list

就能看到启动时的图表界面,方便我们查看所有通过pm2管理的Nodejs服务。

输入,下面命令配合id或者name可以查看某一个进程的详细信息

$ pm2 show Wolverine 或者
$ pm2 show 0

内容涉及重启次数、运行时间、脚本路径、参数、日志路径、运行模式等等信息

输入

$ pm2 monit

停止、重启等命令

$ pm2 stop [app-name|id]  #停止某一个进程,可以使用app-name或者id
$ pm2 stop all #停止所有进程 $ pm2 restart all #重启所有的进程 $ pm2 delete [app-name|id]#删除并停止进程
$ pm2 delete all #删除并停止所有进程

可以进一步查看每一个服务的cpu、内存动态占用情况。

日志监控

如果你一直使用 tail -f log_file.log log_error.log 来查看日志,你可能会爱上下面的这个功能。

$ pm2 logs
$ pm2 logs [app-name]

我们可以实时查看全部进程的日志,或者只查看某一个。我们甚至可以使用json格式查看日志。

$ pm2 logs --json

windows下创建服务

  1. npm i pm2 -g
  2. npm i pm2-windows-service -g
  3. 安装服务:pm2-service-install -n niumowangya (安装后在windows服务中多了一个 niumowangya 的服务); ##卸载pm2-service-uninstall
  4. 设置环境变量:PM2_SERVICE_SCRIPTS = PM2的配置文件( .pm2) or PM2_HOME=D:\.pm2(自己安装的PM2配置的路径);
  5. windows服务中重新启动myservice服务

linux下创建服务

https://pm2.io/doc/en/runtime/guide/startup-hook/?utm_source=pm2&utm_medium=website&utm_campaign=rebranding#next-steps

nodejs部署方式-pm2的更多相关文章

  1. nodejs高大上的部署方式-PM2

    1.最常用的属nohup了,其实就是在后台执行进程,末尾加个&   [zhoujie@ops-dev ~]$ nohup node /home/zhoujie/ops/app.js & ...

  2. nodejs部署配置pm2

    高大上先上部署node方式: 直接通过node app来启动,如果报错了可能直接停在整个运行, supervisor感觉只是拿来用作开发环境的. 目前似乎最常见的线上部署nodejs项目的有forev ...

  3. nodejs在Liunx上的部署生产方式-PM2

    先安装:npm install -g pm2 (注意:使用它要先安装它,用root账号和全局模式安装一下) 安装完成使用:pm2 -v 查看版本信息 安装成功之后,启动nodejs项目:pm2 sta ...

  4. node程序的部署神器pm2的基本使用

    pm2是从nodejs衍生出来的服务器进程管理工具,可以做到开机就启动nodejs.当然了,也可以用nohup来做这件事情的. 前言 众所周知,Node.js运行在Chrome的JavaScript运 ...

  5. 介绍几种SSIS部署方式

    介绍 如果你已经开发完一个不错的SSIS包并且能够在你的本地完美的运行,每个任务都亮起绿色的通过标志.这时为了能够让这个包处理能够在指定时间运行,你需要将其发布到一个服务器上,并做好相关配置.作为开发 ...

  6. 到底应该选择那种Linux.NET的部署方式?

    当前部署Linux.NET环境的方式可谓是五花八门,既有传统的源码编译的方式.又有各式各样的一键安装脚本.还有绿色包安装方式,而随着Mono官方的新站上线,更增加了采用RPM包的部署方式.那对于一名L ...

  7. 使用Kylin构建企业大数据分析平台的4种部署方式

    本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...

  8. .NET Core应用程序的2种部署方式

    1. Portable 共享.NET Core运行时环境与程序集依赖,部署的目标机器上需要事先安装.NET Core SDK,这是.NET Core的默认部署方式. 2. Self-contained ...

  9. ThinkPHP 学习笔记 ( 一 ) 项目部署:应用部署方式与模块分组部署方式

    /** * ThinkPHP version 3.1.3 */ ThinkPHP ( 官方网站:http://www.thinkphp.cn/ ) 目前最新版本是 3.2.2,它要求 PHP 的版本高 ...

随机推荐

  1. 又拍云张聪:OpenResty 动态流控的几种姿势

    2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...

  2. .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

  3. 中国.NET:各地微软技术俱乐部汇总(更新中...)

    与微软技术的发展历程相似,微软俱乐部的发展同样经历着沉沉浮浮.2002年周庆麒先生创办的著名Office技术论坛Excel Home的上线,各种线上技术社区在中国的互联网世界中萌发.接着以鞠海洋(广州 ...

  4. SpringSecurity自定义AuthenticationProvider和AuthenticationFilter

    AuthenticationProvider 默认实现:DaoAuthenticationProvider 授权方式提供者,判断授权有效性,用户有效性,在判断用户是否有效性,它依赖于UserDetai ...

  5. 基于.NetCore的Redis5.0.3(最新版)快速入门、源码解析、集群搭建与SDK使用【原创】

    1.[基础]redis能带给我们什么福利 Redis(Remote Dictionary Server)官网:https://redis.io/ Redis命令:https://redis.io/co ...

  6. SiftGPU在Ubuntu和Windows下的编译与使用

    Sift特征应该是使用最多的局部特征了,但是相比其他的一些特征描述符,计算sift特征描述符的时间较长.Changchang Wu使用GPU加速,实现了GPU版的sift特征提取SiftGPU. Si ...

  7. 详解mybatis配置文件

    在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...

  8. Rekit

    本文转自:http://rekit.js.org/docs/get-started.html Get started The easiest way to try out Rekit is creat ...

  9. (最完美)MIUI12系统的Usb调试模式在哪里开启的步骤

    当我们使用安卓手机通过数据线链接到Pc的时候,或者使用的有些app比如我们公司营销小组当使用的app引号精灵,之前的老版本就需要开启usb调试模式下使用,现当新版本不需要了,如果手机没有开启usb调试 ...

  10. jsp页面中include静态html出现乱码问题的解决方式

    这个问题出现过两次,上次没有做好记录,今天又出现了.不过这两次的情景也不完全一致. 今天通过搜索找到这篇文章的解决方式很好,可供参考.原博客地址http://blog.csdn.net/izgnaw/ ...