设为首页 收藏本站
查看: 692|回复: 0

[经验分享] nodejs pm2教程(转载)

[复制链接]

尚未签到

发表于 2017-2-24 09:22:38 | 显示全部楼层 |阅读模式
一、简介
  pm2是一个带有负载均衡功能的应用进程管理器,类似有Supervisor,forever。
二、安装
  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 #启动,如下图:

DSC0000.jpg

  • # pm2 list #查看pm2进程,如下图:

DSC0001.jpg 七、备注
  其他可参数见官网:http://pm2.keymetrics.io
八、附件
FieldTypeExampleDescription
namestring"myAPI"name your app will have in PM2
scriptstring"bin/app.js"path of your app
argslist["--enable-logs", "-n", "15"]arguments given to your app when it is launched
node_argslist["--harmony", "--max-stack-size=1024"]arguments given to node when it is launched
cwdstring"/var/www/app/prod"the directory from which your app will be launched
exec_modestring"cluster""fork" mode is used by default, "cluster" mode can be configured with instances field
instancesnumber4number of instances for your clustered app, 0 means as much instances as you have CPU cores. a negative value means CPU cores - value (e.g -1 on a 4 cores machine will spawn 3 instances)
exec_interpreterstring"node"defaults to "node". can be "python", "ruby", "bash" or whatever interpreter you wish to use. "none" will execute your app as a binary executable
log_date_formatstring"YYYY-MM-DD HH:mm Z"format in which timestamps will be displayed in the logs
error_filestring"/var/log/node-app/node-app.stderr.log"path to the specified error log file. PM2 generates one by default if not specified and you can find it by typing pm2 desc <app id>
out_filestring"/var/log/node-app/node-app.stdout.log"path to the specified output log file. PM2 generates one by default if not specified and you can find it by typing pm2 desc <app id>
pid_filestring"pids/node-geo-api.pid"path to the specified pid file. PM2 generates one by default if not specified and you can find it by typing pm2 desc <app id>
merge_logsbooleanfalsedefaults to false. if true, it will merge logs from all instances of the same app into the same file
cron_restartstring"1 0 * * *"a cron pattern to restart your app. only works in "cluster" mode for now. soon to be avaible in "fork" mode as well
watchbooleantrueenables the watch feature, defaults to "false". if true, it will restart your app everytime a file change is detected on the folder or subfolder of your app.
ignore_watchlist["[\/\\]\./", "node_modules"]list of regex to ignore some file or folder names by the watch feature
min_uptimenumber1000min uptime of the app to be considered started (i.e. if the app crashes in this time frame, the app will only be restarted the number set in max_restarts (default 15), after that it's errored)
max_restartsnumber10number of consecutive unstable restarts (less than 1sec interval or custom time via min_uptime) before your app is considered errored and stop being
max_memory_restartstring"150M"your app will be restarted by PM2 if it exceeds the amount of memory specified. human-friendly format : it can be "10M", "100K", "2G" and so on...
envobject{"NODE_ENV": "production", "ID": "42"}env variables which will appear in your app
autorestartbooleanfalsetrue by default. if false, PM2 will not restart your app if it crashes or ends peacefully
vizionbooleanfalsetrue by default. if false, PM2 will start without vizion features (versioning control metadatas)
post_updatelist["npm install", "echo launching the app"]a list of commands which will be executed after you perform a Pull/Upgrade operation from Keymetrics dashboard
forcebooleantruedefaults to false. if true, you can start the same script several times which is usually not allowed by PM2
next_gen_jsbooleantruedefaults to false. if true, PM2 will launch your app using embedded BabelJS features which means you can run ES6/ES7 javascript code
restart_delaynumber4000time to wait before restarting a crashed app (in milliseconds). defaults to 0.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346427-1-1.html 上篇帖子: 在Linux(ubuntu server)上面安装NodeJS的正确姿势 下篇帖子: 3分钟干货学会使用node-inspector调试NodeJS代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表