PM2 管理 node.js 开机自启动 (非 root 用户)
发布于: 2020 年 08 月 20 日
最近在整理线上node.js项目开机自启动的方法.找了一圈之后,发现还是PM2进行管理简单粗暴.进行了一番测试之后,完全可行.特此记录如下.由于线上均是使用非root用户启动.所以本文档如无特殊需求,均是普通用户.
环境
node.js 10.4
centos7+
安装pm2和node.js
node.js安装略过.网上很多教程,这里附上官网的下载地址.根据自己的需求下载即可
安装PM2
如果想深入了解PM2的话,可以去官网官网一番.点我跳转PM2官网
开始进入主题
# 配置淘宝镜像源npm config set registry https://registry.npm.taobao.org #配置好了之后,开始安装pm2npm 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.0added 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 centosTemplate[Unit]Description=PM2 process managerDocumentation=https://pm2.keymetrics.io/After=network.target[Service]Type=forkingUser=testLimitNOFILE=infinityLimitNPROC=infinityLimitCORE=infinityEnvironment=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/binEnvironment=PM2_HOME=/home/test/.pm2PIDFile=/home/test/.pm2/pm2.pidRestart=on-failureExecStart=/test/node/lib/node_modules/pm2/bin/pm2 resurrectExecReload=/test/node/lib/node_modules/pm2/bin/pm2 reload allExecStop=/test/node/lib/node_modules/pm2/bin/pm2 kill[Install]WantedBy=multi-user.targetTarget path/etc/systemd/system/pm2-test.serviceCommand 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.现在可以测试是否配置正常.
最后切记,切莫在生产服务器上面做测试.........
本文完
参考资料
划线
评论
复制
发布于: 2020 年 08 月 20 日 阅读数: 50
版权声明: 本文为 InfoQ 作者【openbytes】的原创文章。
原文链接:【http://xie.infoq.cn/article/008b3403a7cb0292071b153ad】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
openbytes
关注
大龄运维狗 2020.08.19 加入
今天比昨天好,这不是希望嘛
评论