zoukankan      html  css  js  c++  java
  • PM2 进程管理工具

    PM2是Node.js的进程管理工具,利用它可以非常容易地实现开机应用自动启动以及必要时自动启动的功能。

    我们可以使用 pm2 来守护进程

    以下示例采用node-red来演示。

    [alick@devnet ~]# sudo npm install -g pm2
    

    然后我们启动 node-red 

    [alick@devnet ~]# pm2 start node-red
    
                            -------------
    
    __/\\\\\\\____/\\____________/\\____/\\\\\_____
     _/\/////////\\_/\\\________/\\\__/\///////\\___
      _/\\_______/\\_/\//\\____/\//\\_///______//\\__
       _/\\\\\\/__/\\///\/\/_/\\___________/\/___
        _/\/////////____/\\__///\/___/\\________/\//_____
         _/\\_____________/\\____///_____/\\_____/\//________
          _/\\_____________/\\_____________/\\___/\/___________
           _/\\_____________/\\_____________/\\__/\\\\\\\\_
            _///______________///______________///__///////////////__
    
    
                              Runtime Edition
    
            PM2 is a Production Process Manager for Node.js applications
                         with a built-in Load Balancer.
    
                    Start and Daemonize any application:
                    $ pm2 start app.js
    
                    Load Balance 4 instances of api.js:
                    $ pm2 start api.js -i 4
    
                    Monitor in production:
                    $ pm2 monitor
    
                    Make pm2 auto-boot at server restart:
                    $ pm2 startup
    
                    To go further checkout:
                    http://pm2.io/
    
    
                            -------------
    
    [PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
    [PM2] PM2 Successfully daemonized
    [PM2] Starting /usr/bin/node-red in fork_mode (1 instance)
    [PM2] Done.
    ┌─────┬─────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
    │ id  │ name        │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
    ├─────┼─────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
    │ 0   │ node-red    │ default     │ N/A     │ fork    │ 24229    │ 0s     │ 0    │ online    │ 0%       │ 13.5mb   │ root     │ disabled │
    └─────┴─────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

    重启所有 ProcessId

    [alick@devnet ~]# pm2 restart all
    Use --update-env to update environment variables
    [PM2] Applying action restartProcessId on app [all](ids: [ 0 ])
    [PM2] [node-red](0) ✓
    ┌─────┬─────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
    │ id  │ name        │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
    ├─────┼─────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
    │ 0   │ node-red    │ default     │ N/A     │ fork    │ 24257    │ 0s     │ 1    │ online    │ 0%       │ 13.2mb   │ root     │ disabled │
    └─────┴─────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

    查看 node-red 相关系统信息如下:

    [alick@devnet ~]# pm2 info node-red
     Describing process with id 0 - name node-red 
    ┌───────────────────┬────────────────────────────────────┐
    │ status            │ online                             │
    │ name              │ node-red                           │
    │ namespacedefault                            │
    │ version           │ N/A                                │
    │ restarts          │ 1                                  │
    │ uptime            │ 64s                                │
    │ script path       │ /usr/bin/node-red                  │
    │ script args       │ N/A                                │
    │ error log path    │ /root/.pm2/logs/node-red-error.log │
    │ out log path      │ /root/.pm2/logs/node-red-out.log   │
    │ pid path          │ /root/.pm2/pids/node-red-0.pid     │
    │ interpreter       │ node                               │
    │ interpreter args  │ N/A                                │
    │ script id         │ 0                                  │
    │ exec cwd          │ /root                              │
    │ exec mode         │ fork_mode                          │
    │ node.js version   │ 14.5.0                             │
    │ node env          │ N/A                                │
    │ watch & reload    │ ✘                                  │
    │ unstable restarts │ 0                                  │
    │ created at        │ 2020-07-09T10:38:40.795Z           │
    └───────────────────┴────────────────────────────────────┘
     Actions available 
    ┌────────────────────────┐
    │ km:heapdump            │
    │ km:cpu:profiling:start │
    │ km:cpu:profiling:stop  │
    │ km:heap:sampling:start │
    │ km:heap:sampling:stop  │
    └────────────────────────┘
     Trigger via: pm2 trigger node-red <action_name>
    
     Code metrics value 
    ┌────────────────────────┬───────────┐
    │ Heap Size              │ 26.41 MiB │
    │ Heap Usage             │ 93.64 %   │
    │ Used Heap Size         │ 24.73 MiB │
    │ Active requests        │ 0         │
    │ Active handles         │ 4         │
    │ Event Loop Latency     │ 0.45 ms   │
    │ Event Loop Latency p95 │ 1.55 ms   │
    └────────────────────────┴───────────┘
     Divergent env variables from local env 
    
    
     Add your own code metrics: http://bit.ly/code-metrics
     Use `pm2 logs node-red [--lines 1000]` to display logs
     Use `pm2 env 0` to display environment variables
     Use `pm2 monit` to monitor CPU and Memory usage node-red

    查看 node-red 相关日志信息如下:

    [alick@devnet ~]# pm2 logs node-red
    [TAILING] Tailing last 15 lines for [node-red] process (change the value with --lines option)
    /root/.pm2/logs/node-red-error.log last 15 lines:
    /root/.pm2/logs/node-red-out.log last 15 lines:
    0|node-red | ---------------------------------------------------------------------
    0|node-red | Your flow credentials file is encrypted using a system-generated key.
    0|node-red | 
    0|node-red | If the system-generated key is lost for any reason, your credentials
    0|node-red | file will not be recoverable, you will have to delete it and re-enter
    0|node-red | your credentials.
    0|node-red | 
    0|node-red | You should set your own key using the 'credentialSecret' option in
    0|node-red | your settings file. Node-RED will then re-encrypt your credentials
    0|node-red | file using your chosen key the next time you deploy a change.
    0|node-red | ---------------------------------------------------------------------
    0|node-red | 
    0|node-red | 9 Jul 18:38:45 - [info] Starting flows
    0|node-red | 9 Jul 18:38:45 - [info] Started flows
    0|node-red | 9 Jul 18:38:45 - [info] Server now running at http://127.0.0.1:1880/

    保存现在的 process 信息然后,设置为开机启动

    [alick@devnet ~]# pm2 save
    [PM2] Saving current process list...
    [PM2] Successfully saved in /root/.pm2/dump.pm2
    
    [alick@devnet ~]# pm2 startup
    [PM2] Init System found: systemd
    Platform systemd
    Template
    [Unit]
    Description=PM2 process manager
    Documentation=https://pm2.keymetrics.io/
    After=network.target
    
    [Service]
    Type=forking
    User=root
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    Environment=PM2_HOME=/root/.pm2
    PIDFile=/root/.pm2/pm2.pid
    Restart=on-failure
    
    ExecStart=/usr/lib/node_modules/pm2/bin/pm2 resurrect
    ExecReload=/usr/lib/node_modules/pm2/bin/pm2 reload all
    ExecStop=/usr/lib/node_modules/pm2/bin/pm2 kill
    
    [Install]
    WantedBy=multi-user.target
    
    Target path
    /etc/systemd/system/pm2-root.service
    Command list
    [ 'systemctl enable pm2-root' ]
    [PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
    [PM2] Making script booting at startup...
    [PM2] [-] Executing: systemctl enable pm2-root...
    Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /etc/systemd/system/pm2-root.service.
    [PM2] [v] Command successfully executed.
    +---------------------------------------+
    [PM2] Freeze a process list on reboot via:
    $ pm2 save
    
    [PM2] Remove init script via:
    $ pm2 unstartup systemd

    访问浏览器界面,我们可以通过 1880 端口来正常访问 Node-RED 了。

  • 相关阅读:
    学习博客 启动日记
    hystrix dashboard Unable to connect to Command Metric Stream解决办法
    iview-cli 项目、iView admin 跨域问题解决方案
    java面试题
    -bash: sdk: command not found
    Python之路径处理
    Python之简单文件操作
    Python之常用数据类型详解
    Python常用内置函数
    2015年开发业界十大技术视频排行榜
  • 原文地址:https://www.cnblogs.com/airoot/p/14602369.html
Copyright © 2011-2022 走看看