zoukankan      html  css  js  c++  java
  • nodejs pm2配置使用

    nodejs pm2配置使用教程
    参考链接:http://www.111cn.net/sys/linux/100927.htm

    安装步骤:

    yum -y install npm
    npm install -g pm2
    npm install --productions
    在项目跟目录再安装下依赖
    pm2 start ecosystem.json
    然后启动就好了

    一、简介
    pm2是一个带有负载均衡功能的应用进程管理器,类似有Supervisor,forever。
    当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

    主要特性:
    内建负载均衡(使用Node cluster 集群模块)
    后台运行
    0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
    具有Ubuntu和CentOS 的启动脚本
    停止不稳定的进程(避免无限循环)
    控制台检测
    提供 HTTP API
    远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

    测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS.


    二、安装
    Linux Binaries下载地址:https://nodejs.org/dist
    cd oneinstack/src
    wget https://nodejs.org/dist/v4.2.4/node-v4.2.4-linux-x64.tar.gz
    tar xzf node-v4.2.4-linux-x64.tar.gz
    cp node-v4.2.4-linux-x64/bin/node /usr/local/bin/
    cp -R node-v4.2.4-linux-x64/lib/node_modules /usr/local/lib/
    ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm
    npm install pm2@latest -g #安装最新版本pm2模块
    PS: 如果你的主机无法连接公网,先找到能连公网的主机安装上面的方法安装pm2,然后拷贝到你要安装的主机。拷贝如下目录:
    /usr/local/bin/node
    /usr/local/lib/node_modules
    再创建相关软连接
    三、PM2常用命令
    假设你现在已经写好了一个app.js的文件,需要启动,你可以使用pm2进行管理
    1. 启动
    # pm2 start app.js
    # pm2 start app.js --name my-api #my-api为PM2进程名称
    # pm2 start app.js -i 0 #根据CPU核数启动进程个数
    # pm2 start app.js --watch #实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload
    2. 查看进程
    # pm2 list
    # pm2 show 0 或者 # pm2 info 0 #查看进程详细信息,0为PM2进程id
    3. 监控
    # pm2 monit
    4. 停止
    # pm2 stop all #停止PM2列表中所有的进程
    # pm2 stop 0 #停止PM2列表中进程为0的进程
    5. 重载
    # pm2 reload all #重载PM2列表中所有的进程
    # pm2 reload 0 #重载PM2列表中进程为0的进程
    6. 重启
    # pm2 restart all #重启PM2列表中所有的进程
    # pm2 restart 0 #重启PM2列表中进程为0的进程
    7. 删除PM2进程
    # pm2 delete 0 #删除PM2列表中进程为0的进程
    # pm2 delete all #删除PM2列表中所有的进程
    8. 日志操作
    # pm2 logs [--raw] #Display all processes logs in streaming
    # pm2 flush #Empty all log file
    # pm2 reloadLogs #Reload all logs
    9. 升级PM2
    # npm install pm2@lastest -g #安装最新的PM2版本
    # pm2 updatePM2 #升级pm2
    10. 更多命令参数请查看帮助
    # pm2 --help

    四、PM2目录结构
    默认的目录是:当前用于的家目录下的.pm2目录(此目录可以自定义,请参考:五、自定义启动文件),详细信息如下:
    $HOME/.pm2 #will contain all PM2 related files
    $HOME/.pm2/logs #will contain all applications logs
    $HOME/.pm2/pids #will contain all applications pids
    $HOME/.pm2/pm2.log #PM2 logs
    $HOME/.pm2/pm2.pid #PM2 pid
    $HOME/.pm2/rpc.sock #Socket file for remote commands
    $HOME/.pm2/pub.sock #Socket file for publishable events
    $HOME/.pm2/conf.js #PM2 Configuration
    五、自定义启动文件
    创建一个test.json的示例文件,格式如下:
    {
    "apps":
    {
    "name": "test",
    "cwd": "/data/wwwroot/nodejs",
    "script": "./test.sh",
    "exec_interpreter": "bash",
    "min_uptime": "60s",
    "max_restarts": 30,
    "exec_mode" : "cluster_mode",
    "error_file" : "./test-err.log",
    "out_file": "./test-out.log",
    "pid_file": "./test.pid"
    "watch": false
    }
    }
    说明:
    apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
    name:应用程序的名称
    cwd:应用程序所在的目录
    script:应用程序的脚本路径
    exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
    min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
    max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
    exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
    error_file:自定义应用程序的错误日志文件
    out_file:自定义应用程序日志文件
    pid_file:自定义应用程序的pid文件
    watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。

    六、实例
    已上面的test.json为例
    # cat > /data/wwwroot/nodejs/test.sh << EOF
    #!/bin/bash
    while :
    do
    echo "Test" >> 1.log
    sleep 5
    done
    EOF
    # chmod +x test.sh #添加执行权限
    # pm2 start test.json

    启动脚本:

     1 #!/bin/bash
     2 #chkconfig: 345 99 10
     3 #description: Auto-starts tomcat
     4 # /etc/init.d/tomcatd
     5 # Tomcat auto-start
     6 # Source function library.
     7 . /etc/init.d/functions
     8 # source networking configuration.
     9 . /etc/sysconfig/network
    10 RETVAL=0
    11 BAK_DIR=/data/backup
    12 JAR_PATH=/data/active
    13 JAR_NAME=ecosystem.json
    14 LOG_PATH=/data/active/log
    15 PROCESS_PATH_NAME=/bin/www
    16 PM2=/data/services/node6/bin/pm2
    17 TOMCATUSER=root
    18 
    19 start()
    20 {
    21         if [ -f $JAR_PATH/${JAR_NAME} ];
    22           then
    23             echo $"Starting json package"
    24         exec su - "${TOMCATUSER}" -c "cd ${JAR_PATH};mkdir -p ${LOG_PATH};nohup ${PM2} start ${JAR_PATH}/${JAR_NAME} > /dev/null 2>&1 &"
    25             RETVAL=$?
    26             echo " OK"
    27             return $RETVAL
    28         fi
    29 }
    30 stop()
    31 {
    32         if [ -f $JAR_PATH/${JAR_NAME} ];
    33           then
    34             echo $"Stopping json package"
    35             exec su - "${TOMCATUSER}" -c "cd ${JAR_PATH};nohup ${PM2} stop ${JAR_PATH}/${JAR_NAME} > /dev/null 2>&1 &"
    36             RETVAL=$?
    37             sleep 1
    38             exec su - "${TOMCATUSER}" -c "ps aux|grep ${JAR_PATH}/${PROCESS_PATH_NAME}|grep -v grep|awk '{print $2}'|xargs kill -9"
    39             echo " OK"
    40             return $RETVAL
    41         fi
    42 }
    43 
    44 case "$1" in
    45 start)
    46     start
    47     ;;
    48 stop)
    49     stop
    50     ;;
    51 *)
    52     echo $"Usage: $0 {start|stop|backup}"
    53     exit 1
    54     ;;
    55 esac
    56 exit $RETVAL
    spring-active
  • 相关阅读:
    事务传播机制,搞懂。
    洛谷 P1553 数字反转(升级版) 题解
    洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here 题解
    洛谷 P1055 ISBN号码 题解
    洛谷 P2141 珠心算测验 题解
    洛谷 P1047 校门外的树 题解
    洛谷 P1980 计数问题 题解
    洛谷 P1008 三连击 题解
    HDU 1013 题解
    HDU 1012 题解
  • 原文地址:https://www.cnblogs.com/liyongsan/p/7200603.html
Copyright © 2011-2022 走看看