egg+pm2使用指南

4,936 阅读3分钟

       最近在使用node部署项目,没想到还有许多小公司完全不用守护进程的工具直接跑项目的。因为我们搭建的项目越来越多看着越来越烦,就自己搭建pm2了。之前一直是别人弄好我自己直接用的,第一次搭建考虑不周,请各位看客多多指正。

1、首先全局安裝pm2      npm i pm2 -g

2、然后可以自己直接用 pm2 start [项目启动文件]

3、对于egg的项目来说首先需要创建server.js启动文件,代码如下


// server.jsconst egg = require('egg');const workers = Number(process.argv[2] || require('os').cpus().length);egg.startCluster({  workers,  baseDir: __dirname,});

4、此时可以pm2 start server.js,但是这样的话对缺少对pm2 的配置

5、创建并配置pm2配置文件——pm2.config.js,配置里边可以配置项目名,执行文件,实例个数,内存限制,日志输出,重启次数,监听重启等。

const day = require('dayjs');module.exports = {  apps: [    {      name: 'server', // 项目名      script: './server.js', // 执行文件      cwd: './', // 根目录      args: 'one two', // 传递给脚本的参数      interpreter: '', // 指定的脚本解释器      interpreter_args: '', // 传递给解释器的参数      // exec_mode: 'cluster_mode', // 应用启动模式,支持fork和cluster模式      instances: 1, // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max      max_memory_restart: '1G', // 最大内存限制数,超出自动重启      error_file: `./logs/pm2/${day().format('YYYYMMDD')}/app-err.log`, // 错误日志文件      out_file: `./logs/pm2/${day().format('YYYYMMDD')}/app-out.log`, // 正常日志文件      merge_logs: true, // 设置追加日志而不是新建日志      log_date_format: 'YYYY-MM-DD HH:mm:ss', // 指定日志文件的时间格式      min_uptime: 1000, // 应用运行少于时间被认为是异常启动      max_restarts: 30, // 最大异常重启次数,即小于min_uptime运行时间重启次数;      autorestart: true, // 默认为true, 发生异常的情况下自动重启      cron_restart: '', // crontab时间格式重启应用,目前只支持cluster模式;      restart_delay: 60, // 异常重启情况下,延时重启时间      // watch: true, // 是否监听文件变动然后重启      // ignore_watch: [      //   // 不用监听的文件      //   'node_modules',      //   'logs',      //   'news',      //   'run',      //   'test',      //   'typings',      //   'pm2.config',      // ],      env: {        NODE_ENV: 'development',      },      env_production: {        NODE_ENV: 'production',      },    },  ],};

6、此时可以 pm2 start pm2.config.js,就可以在pm2 list 里边看到你的项目的情况。

7、pm2 使用的简单介绍

     pm2 start ...   启动项目
     pm2 restart ...   重启项目
     pm2 delete ...   删除项目
     pm2 logs ...     查看日志(也可以直接打开文件查看)
     pm2 gracefulReload ... 这个我用的比较少
     

8、注意事项

a、有时候项目restart不起来,报错端口占用,这里是项目内存占用过大会重开,所以去netstat 里边用taskkill杀掉对应的进程就好了,当然你也可以吧内存配置的超级大...
b、输出日志的配置只是项目启用生效,之后都是追加,所以导致项目时间久了日志文件会超级大,暂时没空解决,之后解决了再来更新
c、不建议开启项目监测自动重启,对于线上项目还是稳一点。因为你可以不小心改了东西他都会替你重启。这样很容易出问题的