PM2 管理 node.js 开机自启动 (非 root 用户)

用户头像
openbytes
关注
发布于: 2020 年 08 月 20 日

最近在整理线上node.js项目开机自启动的方法.找了一圈之后,发现还是PM2进行管理简单粗暴.进行了一番测试之后,完全可行.特此记录如下.由于线上均是使用非root用户启动.所以本文档如无特殊需求,均是普通用户.

环境

  • node.js 10.4

  • centos7+



安装pm2和node.js

node.js安装略过.网上很多教程,这里附上官网的下载地址.根据自己的需求下载即可



node.js官网下载



安装PM2

如果想深入了解PM2的话,可以去官网官网一番.点我跳转PM2官网

开始进入主题

# 配置淘宝镜像源
npm config set registry https://registry.npm.taobao.org
#配置好了之后,开始安装pm2
npm install pm2@latest -g
...
npm WARN ws@7.2.5 requires a peer of bufferutil@^4.0.1 but none is installed. You must install peer dependencies yourself.
npm WARN ws@7.2.5 requires a peer of utf-8-validate@^5.0.2 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.3 (node_modules/pm2/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
+ pm2@4.4.0
added 185 packages from 191 contributors in 91.244s
...
# 如果出现如上,那证明安装成功.



启动node.js程序

安装好PM2之后,我们启动一个测试node.js程序看看效果.

pm2 start /opt/example/index.js -n example -i 1
# pm2 start 启动一个pm2实例
# /opt/example/index.js node.js的主程序
# -n 给启动的实例赋予一个项目名
# -i 线程数.一般多少核CPU就启动多少.看你自己的情况.
[PM2] Starting /opt/example/index.js in cluster_mode (1 instance)
[PM2] Done.
┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ example │ default │ 1.0.0 │ cluster │ 1398 │ 0s │ 0 │ online │ 0% │ 21.3mb │ test │ disabled │
└─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

以上就是一个完整的启动实例

保存PM2启动信息

pm2 save
# [PM2] Saving current process list...
[PM2] Successfully saved in /home/test/.pm2/dump.pm2



设置开机启动



# 这里需要注意一点的就是,需要切换到root用户,很重要.我在这里卡了很久才成功
pm2 startup centos -u test --hp /home/test/
# pm2 startup 创建开机启动脚本
# centos 你服务器使用的平台.ubuntu用户改成ubuntu即可
# -u test 使用哪个用户启动
# --hp /home/test 用户的家目录.也是放置刚才执行pm2 save 之后产生的dump.pm2 文件的路径
[PM2] Init System found: systemd
-----------------------------------------------------------
PM2 detected systemd but you precised centos
Please verify that your choice is indeed your init system
If you arent sure, just run : pm2 startup
-----------------------------------------------------------
Platform centos
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target
[Service]
Type=forking
User=test
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/test/node/bin:/root/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/test/.pm2
PIDFile=/home/test/.pm2/pm2.pid
Restart=on-failure
ExecStart=/test/node/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/test/node/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/test/node/lib/node_modules/pm2/bin/pm2 kill
[Install]
WantedBy=multi-user.target
Target path
/etc/systemd/system/pm2-test.service
Command list
[ 'systemctl enable pm2-zywa' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-test.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-test...
Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-test.service to /etc/systemd/system/pm2-zywa.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save
[PM2] Remove init script via:
$ pm2 unstartup centos

如果出现以上提示,那证明开机自启动脚本配置OK.现在可以测试是否配置正常.

最后切记,切莫在生产服务器上面做测试.........

本文完



参考资料

pm2官网

发布于: 2020 年 08 月 20 日 阅读数: 50
用户头像

openbytes

关注

大龄运维狗 2020.08.19 加入

今天比昨天好,这不是希望嘛

评论

发布
暂无评论
PM2 管理node.js开机自启动(非root用户)