灌水成绩
等级头衔
ID : 1
管理员
积分成就
威望 : 8
点
贡献 : 9 次
下载币 : 402 枚
在线时间 : 1862 小时
注册时间 : 2013-9-5
最后登录 : 2026-8-2
方法一: 卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装! 方法二: 自己手动安装PM2 需要先安装npm % N0 |( d2 T l+ U7 p) o
/ s1 _) O6 Y; ^* ~ b& Z5 a
2 G0 J; G6 Z+ }! X g
* A8 V) M" P1 c' U: f
yum -y install npm
, Z ?5 k3 Q% x+ i. W 0 K/ x! z+ P2 r* e$ U& |# D
- n( I% Y% r% s
# X% e6 |* P2 O: Q, F
安装pm2
$ n5 o# }& I- a& V5 |. y, ? U/ G a. ], {( B: _7 [& b5 J r, R
: T+ a" s7 N% O6 Y9 j
" o2 s5 e+ o4 ~# m# Z& ^/ M4 y npm install pm2 -g 9 H7 ~0 D; o- C" }" ]
" @0 b- P: ]! Z
1 d' \" x2 n; ?. s Q* _
) |- W' p* D$ ?. Y 添加配置文件
6 L J. D3 ~* J' m7 ?6 e1 ^- r ! F" j G+ ^8 d3 G& d0 g' N) Z
) @% j6 \' a& w; H : b5 @* W* b# x
vim /etc/profile + u5 L' g7 L' N# X' i
: J/ `- s1 k- l+ q6 P/ K. Y% [ PATH=$PATH:/usr/lib/node_modules/pm2/bin 3 @5 L/ l, ] T* n8 D7 P
7 u' a( {# Q( r. t" g; d8 L
source /etc/profile + t. }, p" Z# u
% m4 c+ e3 t. y6 ]
. Y2 q9 a( a3 V6 s
4 J4 f& l' ^) Q) `3 N4 S N 测试
! s2 [: v" a0 c& ]) U! m% O) P, o
3 y |* t/ S i
1 H4 V; a" j1 o4 G ' t5 J% Y; n6 ^* w o9 _0 p
pm2 -v
f+ i- Z# B+ U
, ]( P$ n- p% K j3 ?1 {7 I0 w$ Z 9 c" X, t w& t0 F3 B
b; S3 f& K" y0 Q- r1 U 查看PM2安装路径
, r @ o+ @+ }. t k4 o( o: c i
1 I/ J- M( P+ n/ B; ^ ) z. a% Z7 I% }2 A8 |+ m- q
2 F$ L% [5 X2 ~+ \ ~ find / -name "pm2" 5 t+ t& g; w& y! u1 _( D+ K+ c
6 {6 V/ B; n5 ^. \4 @
$ o9 P R$ F& h. P7 m
% A1 B0 h" _7 x 根据自己的安装路径修改配置文件 [color=var(--focus-color)][url=] [/url] 可能遇到的问题 [color=var(--focus-color)][url=] [/url] 问题原因 是node和npm版本太低,我这里版本分别是3.10和6.17
[color=var(--focus-color)][url=] [/url] 解决办法–先卸载之前的npm
* N5 f5 o' R( X; R2 G% j
( H1 W# w6 B4 J% [6 K 4 t) Y/ y1 i T+ D) v$ ~7 v
$ Z8 D; a/ _3 f6 H) D/ Q1 O) P
npm uninstall npm -g ! I$ F0 a- ^8 [- Y
: b$ Z+ y, E, f" W) s; G/ z3 ~
8 o9 b b9 |% S" m C# L" c4 \7 V# `7 j
安装依赖 ; `$ e/ D. g# }) R- `
- f3 p! v& }2 ~* X0 B
# k9 V% @$ w. N( ~
* y, R- t$ _2 g0 i yum -y install gcc gcc-c++ b9 N6 d1 N0 E7 [5 P. i9 Q
2 M7 c9 k. w; r1 A/ u 5 Y# n+ [: R9 w) W* q; f+ d
1 L' h7 _' b9 \/ t* ?. r 下载高版本的node安装包
) Y+ E6 F) W; z7 m3 p " T& N8 G$ p# Q; r) J6 R
! S' W J3 h& q6 b8 Z7 y% ^
3 D$ v) Z' p9 V6 C wget https ://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
9 q. ~" N7 U0 V5 w O& l( ?8 v8 @9 f2 o
6 {+ ? R; `" D% c1 ?& }
5 N" u# m6 `! Y0 ]9 ]0 U0 D 解压到相应的目录 ) a2 p/ a9 Y: f
) l5 `* `" n6 L& x w
# Z/ X+ d4 W# H6 a + X* k9 a# b. E. w9 d' U$ {
tar -xf node-v10. 14 . 1 -linux-x64. tar . gz
% V" ?5 b8 R* _ V" p4 u
' o+ W$ X( W& D 9 Y: Y4 W- A& h: I) {0 S
: _0 C8 `3 }9 L! w 重命名
% L* t. R; C8 c2 a# q# C
! l- l9 }5 J: D C0 w2 b2 O
3 t( A( M% Z0 n7 k7 ~ 1 O0 E" N! L. E# J1 V
mv node-v10. 14 . 1 -linux-x64 node
" I Q$ z# ]. d8 m7 O , e) W& G, B5 Y5 ]7 [; _' V9 j! W+ F, U
+ J3 C' q, [8 W0 b* D; ? 9 G* R% ~6 F U z/ `
添加环境变量(根据自己的路径添加) ) `! s) B; U9 y) |
& y8 t4 h6 w x, l4 b 3 O6 i+ o1 H; R$ x3 u
+ {6 P" _6 e1 M& L/ R
vim /etc/profile
& l% y* U' x' _6 G6 `' \" Z/ t
3 m1 `1 F4 Z4 x- W( y3 [ export NODE_HOME=/myinstall/npm/node ; u) w6 J2 Z& o/ @
7 q. K4 ]& L* E- U5 R( t1 s Q export PATH=$NODE_HOME/bin:$PATH
" t0 S6 o q2 w# Z* Z
7 s t0 r* l& [1 y k : {8 g% O+ ]/ ?; p9 `
2 f- P, C }- g/ W- z6 N1 f
重新加载环境 : t U* z9 g, B7 Y! t7 o) o v! z
8 `. J3 s/ L, u: m
6 t" R$ G: g0 [4 G# f7 {
/ Y- D1 `; x& l1 R- Y source /etc/profile ! g* G5 J( q6 O: @8 j& ?4 f/ w
* T' y( R6 K* i1 Q
. X% E) B1 j0 u T# x* i _9 X* n u" U, b
查看相应版本 [color=var(--focus-color)][url=] [/url] 安装pm2
6 |8 j2 q% Z2 `( w 1 F1 P! i. e( x, Y" L+ }
7 O( `% f/ o- t. p7 Y
1 j8 {9 B4 Q. X' r: C; P
npm install pm2 -g
( {' l1 O: {6 ~& ^
% Q: \$ {# G" E- P ( s. ^4 ?9 }9 x6 } ~/ v: L
. X$ y$ z0 v. U
检测
" v @. A! e4 {: X1 t# Y 5 V( W6 l0 c- l6 ?1 K
% _) [4 F- a- q. c
4 h; n9 R$ d" _7 D" r pm2 list
% J7 B8 R# B% R$ t8 ]; N( |
* d: n3 {$ a, d2 L: d- z$ H( T y2 C
4 ]4 p5 @* ]/ \" |( v/ H( ~. L 0 [0 Z1 o. Z6 x! n# @
[color=var(--focus-color)][url=] [/url] 常用命令 8 _1 b$ W+ i( N" |( Y! K/ x
$ l6 ^& N" y! K+ u; f$ W
, V& e2 P2 ^1 P1 v: S1 c; G0 w # _: p' f5 n/ ~& l) G
$ pm2 start app. js # 启动app.js应用程序
7 W0 H6 F' [1 A+ D' G( } 5 C- Z5 d* K5 p: T2 N/ L% e
1 m! w( P: K- Y6 F
4 c5 T/ s) M; W0 H
2 Z1 h W; f) N' G: o( g( t4 u 8 v% E# y5 F- o6 O3 N
; i, K; \+ X6 {' y
0 p8 w( f0 X! S3 O- O& e; M- H
$ pm2 start app. js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡 + X* J6 _2 |; F5 u0 u |
2 m; C7 [0 c/ N5 C3 J9 y, f
! {3 M2 _7 U5 Q5 b
: L" L7 K' @7 X& F: K1 L
A% }, ^4 y/ ? v4 O3 ` + I2 L5 ?( @8 K$ N. j( c
8 u( f; R+ S6 `" _
. n' U+ O; @5 d' J/ D; f1 j% W
$ pm2 start app. js --name= "api" # 启动应用程序并命名为 "api"
5 Z! `' k+ E: j
0 x @' Z9 |& {: n& \: ?% c) ~
8 u9 x. ^- T" i/ x) m+ k t: c t2 L9 { \
9 ?: L% J; E; U5 d/ e
/ V: A3 V$ q% \% t+ C, @$ ?# {/ i
+ v& x$ Q0 C" N- y0 { ) F2 S2 y( {) K3 ^8 }+ p9 t* |) U
$ pm2 start app. js --watch # 当文件变化时自动重启应用
|; z1 y+ J; F! G
* R1 p, U! ~% i + v: {* m' F+ m, B% L
5 L4 ~ B1 J, }5 l% t
) j( S/ N7 q& ?9 J) d, Z 3 H, [% x" s S5 }0 C- H
1 Z- G* f3 ?; \- v0 j
/ p" B/ ^1 @9 F0 B! N. w. \ $ pm2 start script. sh # 启动 bash 脚本
3 n& \/ v3 W- v/ X- p8 g
$ I3 `$ U+ G5 H5 e 0 O4 x% y- y) b3 _4 b1 L* Q
6 g7 y- F/ S3 O e- w* V; N
. \' [" f8 O3 e4 b! `
& E+ C) V7 u3 {0 L7 e ' h! v! H. m6 T, @6 N6 U7 ^
/ q1 U) K: {4 I* G! E. h% I
$ pm2 list # 列表 PM2 启动的所有的应用程序 5 O, E/ Q7 h; m+ T4 P9 ^
. I% a6 ]0 i! ^4 }
) k' @. n1 x% `! g( Q5 \) ?0 r3 ^+ A + R9 @4 s* G& s6 ?: d" h
7 l* v l& _& D( G) O8 m, B9 l/ J6 G
, R U* m. ]4 a& [0 |
( P6 X+ ~2 s0 g# _+ M- @. T3 z
& @: I6 B# ~7 w& F# N9 W' l2 y $ pm2 monit # 显示每个应用程序的CPU和内存占用情况
5 B! r" \, ^% N- O7 q. `% y; g; z : w# ~! }$ C& @: l: x8 W9 w
" v' l* U" G8 |$ { q, d+ L
$ F* b! U) |* V" p& n
9 D4 r: x2 D" G$ `' x0 d " A6 m9 K- w# v6 Y( ~
9 F1 v- c: m! i6 n" c
1 B9 W' i) y9 o: Y1 X O $ pm2 show [ app-name ] # 显示应用程序的所有信息
4 y: w1 I4 i5 k A9 K 9 J* |, D' q- G
c4 O0 {7 W# p
5 s) v0 H' @6 L3 ? 4 l9 { A/ S. c: i% ?
; w/ r. m( f$ x7 m. [& L
* f% @; K+ {6 ^+ o1 C
/ Q$ W% ~; Q" g3 e& H& x $ pm2 logs # 显示所有的应用程序的日志 9 j% u* T8 i% c8 [
! |3 J: x1 N" `/ |! V 5 H/ p& B( g' F& s+ I" a
# X2 l! A" w2 m + z+ Y; d% w7 M/ q. ]- J
. U+ I4 ~$ m$ l1 J
9 |) v$ O' z, m ; f2 X9 S7 Y4 ]
$ pm2 logs [ app-name ] # 显示指定应用程序的日志 r7 u1 U9 {- H' ~4 y4 F& T Q
0 L# ^3 k9 P3 c 1 V% Q Z, e6 }0 B. v) D9 D' O8 j
. r G2 o" t( A+ D6 ~5 u; s
& w$ M+ j. X$ E6 N
1 T+ K7 c0 E+ L2 j, P, ]9 u. r
6 p s/ p; A3 G
' N* H! F0 _* k, {8 L) t $ pm2 flush
4 x/ R7 y" J% R5 l6 }
5 E, M0 \, w' q7 D$ t0 S) M) ]
( j- \( l9 I& T3 |1 e6 w
- `* b3 I, p# n9 b, ~2 i- V ( q* \/ s0 }$ d, {- }0 `
# j, |8 y( v% c) T
' ^5 J8 }6 f5 N+ h( J
- ~* b( E" V. f* K $ pm2 stop all # 停止所有的应用程序 ) t! H4 y* F6 f! c4 O; O
! b: _% r. G0 x/ g5 [0 ~ # @1 k8 j) k% L* e( E* i
7 \1 k8 f# c$ F! s! c8 W3 S5 h4 c) Z
! L* j2 h5 a% E% ~( C8 `1 _ + n; d* ]/ W9 f
9 j' g) F c! l* ]7 S% i 4 C+ f$ e9 D' Q
$ pm2 stop 0 # 停止 id 为 0 的指定应用程序 5 \4 ~" U; C( }. m* Q, M
% M0 y$ y# A- `3 A) l" ? $ c, _9 K: G4 e9 a3 o
1 T+ ]/ L8 B8 [; B) K) U% d
& ?& ?1 w% c. o b
# O. w! X7 v! E, f, w9 b
; W# ]% L7 x. u9 w0 K, M x ' ]" W1 O9 [; d: G
$ pm2 restart all # 重启所有应用
+ T# S. w% l7 m( x& k+ z y! ^% h1 d" w' A* K( [" K8 f
; H8 l$ g+ d9 D1 L5 |9 ^8 A ; W" M5 l; k& `. U4 i& R# k& P2 R
5 S) K: P% v9 G, w2 L
8 a, O+ F* I2 a# u/ l
! d2 J4 Z1 z' E0 |
) f- G4 z" t/ _" z& a; u6 ~+ }2 M $ pm2 reload all # 重启 cluster mode 下的所有应用 . ^ s* N) r8 G! N Z$ f
$ O2 M1 q6 I6 K0 k7 _7 N
: e3 U" t; p# }
7 {) b$ e; H0 x. j3 O5 U3 }
. i1 t, J! Q0 B+ j2 U }! U7 [' t" h: Z- b! b4 x
$ l( v" `& q7 y
' ?, O) c2 j5 Q5 m" t1 z $ pm2 gracefulReload all # Graceful reload all apps in cluster mode
: Q4 }8 ~: z% F) m! O/ u1 M7 M) ?
4 A, h* u; |7 A8 k% j1 g1 m
4 S( ^9 f8 Y( z
+ _$ h5 w7 z( W) k
9 t7 U, o2 J+ t) R* |
; E+ d' L& j1 a # Z8 C) y, p S" w1 p2 ^. c' m
1 r% W3 P1 ~! l& s; K' q
$ pm2 delete all # 关闭并删除所有应用 ) s# B3 _" G* H6 l4 {* r. e
! p8 C' @# t' G. T
7 O# q: [, j$ `+ [ p% A+ V' D
$ H4 G( k% z) z) d- p 8 _8 N( c; F: D5 Y9 A7 @3 k( O
. `5 u1 @) g" p) b3 m, _
' N: U! @, Q2 d5 Z% P8 I/ W $ c- n$ Q2 l+ R8 h& u% R
$ pm2 delete 0 # 删除指定应用 id 0 a' m l1 A8 M/ e6 U/ g
) |! e/ G: M4 ]* d1 o+ M/ R ) i1 r) D% o7 R3 r. E; `
* e7 [6 O0 m0 j: N N
) L! g5 P0 _, D- U% @
3 y0 b' X4 \7 }; {5 ~
5 L$ f; P2 h8 l( k
2 x' M- \8 {: U6 f+ @" ]) t $ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例 & n. J% H) m0 v1 r( h& t( k
' d8 P; m3 F! h, H
6 a% q, @& \" N4 N- s3 U% l 1 C6 y4 T, {9 K$ g
$ }; T3 E) J, |/ E
9 F$ T" U3 E! x4 f6 U
8 |; s# q: q2 ]7 Z0 q2 u) W X/ C( x
& I( p0 ?( ?# G. B $ pm2 reset [ app-name ] # 重置重启数量 # J% F+ `4 V* ]- F
& z( S( e% W; [0 x & G0 m( A( i1 ^# {) K' {: l" Z& [
8 _% ~$ [; d. W
# I& B$ e2 _( a4 J3 T' y
6 e& Q1 w9 z: A/ J
, u# D: y' Y0 p # L. p7 v* K" b* [0 _9 p2 |
$ pm2 startup # 创建开机自启动命令 4 n8 ?/ S. v; [2 v# `
" A- j5 A. t5 h" K( j
& U3 l o4 ^. j3 b# a: W1 Z5 t- D' m
2 h* K+ p& H/ r
6 { j8 z; n; H( ?& p
0 R# C& }) k" ~5 N6 o/ R2 L6 i : C R7 G+ p2 \2 G/ k
/ `" d) z7 @# R. |1 Z. G+ z7 f \4 o $ pm2 save # 保存当前应用列表
0 g9 |) Y1 b( s$ o" j/ h, k
! U' J; p3 E2 _# z8 I0 S
0 T9 W! | @4 \ 6 K: O' M! [# |) f6 r4 }- B+ X. R y! t
4 s4 _& c' i# b/ w/ P
/ v3 r" _* K! I1 N3 `0 Q
- E2 m2 C! v' r) Q * N8 f' z3 F9 D3 ^
$ pm2 resurrect # 重新加载保存的应用列表
) P" t: I/ r* P. \$ S $ c) C! t: {/ e6 S& K6 R8 H3 i
6 y. @ [8 c: h' v' D$ p
" e$ B9 y) V* w
4 j2 L. E6 u* ]4 @ 6 `" ^! V& B9 K- V! P4 p& a6 M! n
' b0 D8 @' A7 D9 C0 |) t g+ N# n ( o7 L- N& b. ]7 O0 V, d
$ pm2 update # Save processes, kill PM2 and restore processes ( P. z9 S+ G/ L9 W3 X# |& e0 M5 I
: |3 H1 f! G; @2 w
K0 _, U. N- M% @3 G + ?0 {* `9 k* j; z1 \7 |2 M: p
# ~1 y) V; f/ \, P2 }: m$ m! H
4 I. h& ^4 [* G2 P' a6 Y
0 K& t/ G) J/ F1 n% b( }/ A
2 U& m' O; z& t- y $ pm2 generate # Generate a sample json configuration file 6 M) D/ m( J: i: `3 W7 h
/ d; x3 a4 i: Q3 d- }( u / \; I* |% y) y1 W, i. S( B
" B& V7 K3 }9 y1 R/ R6 e
举例:
6 o4 Q! ^; ~# z5 w 阿拉德的脚本启动方法
9 f& O( \. ?$ S0 Z( j 7 C3 F, F: J5 z" ]1 `# I" t5 A8 Q
' U& Q J+ u5 _/ f
) n5 r" l) ]0 U9 x% Y$ i. | cd /www/wwwroot/gmald/src . w) R8 \7 g# o6 }$ j/ o
8 p$ T; t- j9 D) R- B( i# ?
% X# T A. k4 W" J
7 z9 M$ v' B6 j
: c" t y! x- j0 k4 _
6 z7 `" }. l! @! s- I
3 [3 E0 ^7 z9 F8 o$ l
' w: S8 f6 q' s& @ pm2 start app. js
, T; x3 k: v3 {; Y % Z9 c% D( M8 `6 Z
/ `8 s& T% `- V5 g5 m 0 o4 G' {" e% k6 s' l! I
# D' w4 G7 |. a/ Y$ v: Q