灌水成绩
等级头衔
ID : 1
管理员
积分成就
威望 : 8
点
贡献 : 9 次
下载币 : 434 枚
在线时间 : 1951 小时
注册时间 : 2013-9-5
最后登录 : 2026-9-16
方法一: 卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装! 方法二: 自己手动安装PM2 需要先安装npm
& M7 \; ^( w! X+ u6 [
. ]# ?$ Z7 U6 \8 y- Y% i: g+ s
, Y# \+ O. j2 Q9 | & q0 ^/ F* X% b
yum -y install npm
5 z0 ~2 {: E% R7 b* H: T D1 M: \5 y2 e* ~( O# n L
, H+ ~+ u c- n3 ~/ e' }. C ! ]% i- B( [- l6 g$ P& H& b. d7 R# {
安装pm2
2 U, e; M5 {/ g4 [- l ) s5 l+ m* f0 N" r$ @/ M) Q
1 U) z& Q) ]% _/ Q9 x: B- A% u: i2 | # O, u' `% F9 g% t
npm install pm2 -g
v1 n1 l1 V# w3 [1 g . [3 f# f' t2 n0 T1 H
- ~' c' L& x( c, ]4 N; G, E$ K" ]" t) K 7 d! q, Y! y3 O9 V+ G4 U9 K9 I t) ~
添加配置文件 - i" M' x9 B% {
9 r1 b# [8 x3 Y) _
; O' ~$ A# A+ J' {$ S' Y/ `3 C / K8 q/ b: r" i! V
vim /etc/profile ( g" m8 X8 [. _2 T! a* K6 W, t
5 d- `3 q% @2 G
PATH=$PATH:/usr/lib/node_modules/pm2/bin . }9 X: k8 o; |# V! A z6 K
6 G; u) G0 I! P8 U! x
source /etc/profile
8 N; P) O0 g* u7 l
& \4 L1 Z( i, o: C 5 w# \% @& ^$ s& g
, G' {5 r8 |& {% |) Q 测试
; R. U% z- L5 n " z9 s- h, t, K5 i# V
% ^, d; L) d1 Z F& v
7 ~4 V6 b+ i" I1 m7 g pm2 -v 9 v2 ]; p4 f4 Q, X
# C( ]0 X* G$ [0 h) ^/ x6 x 7 s1 R0 h0 A3 a$ y+ v
3 v) w/ t) k8 q" \8 y
查看PM2安装路径 4 n* z6 J4 w5 v( s. g4 P h' [
+ X$ A2 m \$ o$ [
9 z9 a, W* c! U6 }; K | ) @7 ]$ D: b( U ]
find / -name "pm2" , i- n7 \! T, p! \+ l) {1 Q* J7 K# W
/ t: W3 l( S2 [' q+ @& O1 B, i
& O# ~: ~& h% l# b) ]
* X% U9 B, X& m$ p7 Z& \ 根据自己的安装路径修改配置文件 [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
1 @; h1 J! F) D( ? - J0 }2 ]8 ]) S! ?6 P
4 E( l3 P9 n: j' {+ [
# U ^3 D3 C# ~7 C- Q- ^ npm uninstall npm -g
/ R+ y" p* y7 g$ {+ g l
& ?/ W- R T, V1 X" m4 Q 4 y3 d+ N* ^" ^
* c' \0 ~- u; O6 I/ S7 ^
安装依赖 ( m; K8 X& v9 x! [8 p3 s1 P
; L* T, @0 G2 |. @: x2 g3 @- B
" Q8 d6 P: {. m- m7 I& [8 v / l1 b7 R9 l7 L" @' ~/ P' L
yum -y install gcc gcc-c++
5 A# g$ P) x" r) `7 f# h: R+ ]7 z & q! j4 M; U& Y! x4 `+ D7 _/ j8 ]% H
/ @* G z/ e/ Z% ~
7 j: q* L' v1 J1 Z+ a 下载高版本的node安装包 ( g4 U1 E+ F' ^' N3 P
" D2 e8 N s4 ~) b8 l N . V8 t6 V6 h7 [# q# ]1 a0 y
3 i2 h- i9 a& U" l% P% `# d! z( l wget https ://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
0 k; A; }# X$ G1 m: @3 z ' I. V7 L$ t" B
: L6 e1 W4 Z8 k# b) a# H' A% d
- a8 ~$ g) f* Z, g$ ^7 A8 l
解压到相应的目录
# f6 F9 Y8 D8 v. I' j) k) n 1 _, z/ P8 G3 r- U; o0 j( L8 L' Z3 w+ n
: u7 S( @( ^9 P # o$ X+ i+ t4 y; Q E
tar -xf node-v10. 14 . 1 -linux-x64. tar . gz 0 i. z4 G0 Z2 C* C0 Z- q4 _
' {9 |4 s- n7 j( x7 `
) I5 Y8 i3 X, o" o( D' P
0 y* u4 Y5 }3 a2 ^6 Z x
重命名 P# d& v) x! M- `1 c
! f% k* a. O0 b. E% X7 _7 k) \1 d
. R7 G8 x& F' C) T. K1 X6 d: w- F3 |& J
% i3 g( z5 W/ c9 P
mv node-v10. 14 . 1 -linux-x64 node # f" c) l* R4 W: e) d1 C" y; _1 a
+ l& j7 v3 J5 |. J- F9 c" ` 6 \" Z$ B' z5 z7 y
7 M) ?! S0 {% @1 B1 B5 c# u 添加环境变量(根据自己的路径添加) , s# l. Y" `, @- o* R$ L3 V3 M
$ S' d- r$ d( [7 j/ p
& L: Z# b; o8 E6 Z+ [4 ]8 |) k + [0 K% f+ e: p! N; M
vim /etc/profile
1 [+ e& i( A, Q1 \3 m) C5 D( d
3 ]) _: T1 k3 {- T export NODE_HOME=/myinstall/npm/node
9 M5 b* N! y7 R8 R 3 [2 f# X6 b: W: m+ r1 h
export PATH=$NODE_HOME/bin:$PATH
' Y: j% x$ \# \* c/ J+ k& P3 ? ' K$ \7 o, N3 o, z
, T- P8 m# T# [" l- f/ s; b
* R' s B" U. V% H) ~% W! |
重新加载环境 # j6 Z. a+ m; m
5 @1 E0 D1 I( ^8 N
. _! A+ |. y5 J# u# y: V" B
3 S6 d: ?& i1 h' I! L) ]4 f
source /etc/profile % u3 i- r9 \/ s2 j
3 [0 H" |; X+ t' K; b# ]
0 m: E+ F3 R; q" B8 { & `% U3 d& Q$ V f
查看相应版本 [color=var(--focus-color)][url=] [/url] 安装pm2 ( q8 x% A; c! U0 |: Y+ U. O& w
" ?) o6 [/ ?8 B; d" N+ e
6 \1 R5 G% j. _( R
- C% H- p$ f7 e$ x4 c npm install pm2 -g $ v3 d$ c6 s" q, B2 R6 c
' d1 d" q2 V4 [
4 ] B- k2 F1 O. K3 |" h! x3 b
$ E3 X" a; D/ H, c4 ]1 C& [7 g( Y 检测
& u6 e$ x- ~& [$ t3 @' h
. W4 T K, h* j % F* ] f* w9 C' [
& I; G$ D" M! S& f. @# i% P
pm2 list
3 ~& Q& w; L! U 7 i6 g2 d' ~8 A' j( o
1 Q/ F; K/ U0 \" b( h$ D
1 m1 D; O; v* C [color=var(--focus-color)][url=] [/url] 常用命令 & S; }8 e# G9 n2 ]
' Z0 C1 \3 y& m- U$ J2 G# J5 R 3 J8 q$ T+ X# k
' e8 I9 u7 h9 Y8 \& F! c& Q* A $ pm2 start app. js # 启动app.js应用程序 3 z7 X- w! z$ q- S% E3 w3 |
, a p& g2 Y$ o* n$ }* M
6 c/ I/ k3 h Y( c% Y; J& o, k
6 |& [- @- ]; Q; ` + ^- Z( L. k/ S+ T Q
. _. Y# {1 h8 d! F# F " G; v- i/ J: ~( l4 J
) U( ^" A8 h# @5 C $ pm2 start app. js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡
2 ^, ?) q/ |' v* j$ ?0 f # W' t5 T3 j1 w l9 g0 z
7 G9 u( e: M/ j/ p5 K
) ~: ], @/ h, Y: L- W+ Q1 M
. X9 \5 ~) @+ s; `6 C, |0 f 1 |5 R4 F- e& E8 I$ A6 H, u
, `* o6 B# t- @# N3 N; u Q" d% x3 L 8 y; ]) g1 \ F4 ?; Q
$ pm2 start app. js --name= "api" # 启动应用程序并命名为 "api"
0 _% M4 d) c/ g# S ! x& K& {0 H& U
]( o' o, R" k; O6 Z. T
3 A8 X, Q( v" W- i+ c9 Z' E i ) S; n1 T- A& P4 o
: d, X" Q, ]. n2 I
+ f P0 I$ V$ k1 ]/ |4 |; }
( F: ^" M, @- s! R) G4 p0 u
$ pm2 start app. js --watch # 当文件变化时自动重启应用
; X5 W2 k+ G7 M, I( x
% o- F1 e! W, L 9 |2 n$ s/ J7 P7 ^+ e" h( }0 m! Q
d! [' h/ T* ^8 y% V7 u
- m& A0 c+ \- p+ H7 Y$ b& J9 f# u. U8 |
$ _6 d. r W* H2 l1 D, W / t. ?/ h5 w' P7 X
$ N5 o& [/ J7 g; J' X
$ pm2 start script. sh # 启动 bash 脚本
0 N4 c1 u6 Q* u1 @/ Z) r7 { 8 e" I1 d8 |, w) M9 @, k' M, p
1 {! ?3 c' l/ m5 H! ?* j* [2 L ( X- a; P7 v4 }. S
8 D! c4 _( [3 A9 ?$ |4 v2 _ * z6 q& j# r4 ~) Y8 v1 U. W
8 y$ }$ w3 H) O" R, r% K
' s2 Y/ [* X2 o. i $ pm2 list # 列表 PM2 启动的所有的应用程序
; X4 P1 ^1 \; M
- R# V" h% K e0 D& \
) r ~. G M: d# z4 Y0 |5 v4 Y
. x* k" E1 v( h
% O1 w. N; b9 l , M: `+ Q* d3 u5 {- y6 B, m
' j$ k5 A+ S8 |- Y5 c1 B- R) m 9 D" p L; m* B3 Y, \6 ^& G& w
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
, x8 g; H4 n$ X) F. l+ a: }7 I
C5 i8 h3 T4 H/ X+ K, `7 [4 f+ P
- [5 D K7 z3 z2 O6 P; u+ u
' u' D& q6 X8 Y3 `. B
5 H4 Z+ v& ^# N. ?* M8 s( d6 S
; d8 B3 v% |: p9 p1 X ( L! `( r8 `5 g) G/ C" B
7 W9 {1 M3 f: z. ?. T4 v4 K3 P $ pm2 show [ app-name ] # 显示应用程序的所有信息 7 l* Q6 T; s1 D6 k2 f$ [
( t5 X6 q$ `: i4 A# A5 L4 E5 X( r; f
r6 O8 L- J- j6 f, w: ~+ T
7 c1 Q& s- B* ?$ v1 Q& [1 | , i" K* G. ]1 V" c
( R4 q. ?/ _$ N5 W. m: {; n
6 [- e: |9 @! e1 n1 N, p8 `
- X/ z/ B4 K4 Q& a" A $ pm2 logs # 显示所有的应用程序的日志
6 k' ]+ c% s$ |* a5 x$ q7 W ' l4 ` O: w$ C! ~ k% ^. d0 n
: D# e5 |# Y9 C
/ j: Z; G, T: V9 x2 @
& o' N9 u. B( R, L9 c 4 v# D' P. @' a) X
8 l$ J/ b$ F2 H, n) I
q7 r; V0 s% g6 [: W; m; C
$ pm2 logs [ app-name ] # 显示指定应用程序的日志
_4 Z: b, S! @' b5 _ ; H' U6 K& V+ a. q4 a
' T. \$ l1 l1 M6 f. ]4 s
: `( Z: L' @0 q$ P4 a9 j 9 p! s+ m' M& G/ h
7 J8 J u! R! t ! f. Z; P$ M) }6 e+ ?$ K
|# B% q! G ^+ {) ^1 K $ pm2 flush - o, j7 |1 w- B7 N& p5 G
0 f+ V* s$ A L
. ~4 U2 o; [9 F9 |7 s7 o3 Z7 [
- D+ r$ t4 o E+ O' I
- `8 k: J( p9 _2 L% b |0 r( C4 Z0 v3 _3 z* b) j
% W) k. R \9 s- }) O+ i
8 L5 o5 c' s* B1 j $ pm2 stop all # 停止所有的应用程序 + w0 z/ [+ X0 e! W
, c- v% ]1 c6 I# ?+ N/ d
& @ t! c- X: K: \$ l
/ Z( e8 S: u! y K; r) x0 D) h }
( B$ x( E! K% j$ S
/ h" ]1 x& {% j& A0 a - V! {2 y, J+ A+ y4 w& q
1 @4 b/ S- q0 @$ z$ k, F
$ pm2 stop 0 # 停止 id 为 0 的指定应用程序 - R: m. ]& x% z7 y/ u5 d, O% U. N
) ~! K& a* y* P, C# H
' e U' n: y* r5 {/ R0 y# f
) ?8 t" y2 Z2 b7 p2 J& g
0 C; A N: O& R2 A9 ?* J6 c( k3 H
) R6 O a) l; ^% a9 [
7 U3 |2 h, [8 {/ F, u 3 p3 D" n7 x) |9 C; s9 p
$ pm2 restart all # 重启所有应用 ( }# }8 T6 @+ y7 N. O- Z- Q5 L3 B
g# K3 f# V, @. Z; l: R
! j% u0 q0 Q/ x; f- B. w& ?
e+ a. \/ C; r9 K . ^! m9 U$ X6 c8 l1 U6 I
% l5 D1 T5 j0 ^3 {1 N1 T
. b& G+ U. {+ i3 }" V
( U& m: E2 w: A) s. n7 X3 L l0 h+ j0 ` $ pm2 reload all # 重启 cluster mode 下的所有应用 ; T+ c7 r0 N) r f1 n/ U
& v1 u4 q3 ]0 M( q% c% k / y2 z2 J# I* I# Z
6 z) W1 H8 f. ^ Q k
* g6 }! h2 K3 F0 U
9 L' ?0 |# Q; a# G% X: {
* l* e, t4 S ` k. O 0 E5 Q% w) R3 E& N! T ?) F; Q
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode 6 M3 `8 \" `* J+ a; s) ^/ E
7 m# c* _% j8 ~5 N
: u$ @- G4 [/ k# t1 f
3 n% G! F- S- O% V2 Y
) D3 X* I! Z! u# d ! c+ w; @0 O1 o4 a; {
& n4 t; b7 h: b) Z- h 4 Q x r2 ]' h0 d5 y" s
$ pm2 delete all # 关闭并删除所有应用
! F9 Z" e0 ~, x4 r W4 b- w ^5 A% `0 P6 m3 M* I1 n) |
/ D* T# b( x J1 ]. T$ y" Q& ]' M 9 z2 v4 A- P" t& s' n5 V
) S, m& ~5 z7 e9 E4 \2 L( N 4 O) E5 L. m [2 t1 [
9 ]3 P3 F' g# ?; S n
+ Y4 A/ G: q$ n* J; ^1 e" b $ pm2 delete 0 # 删除指定应用 id 0
+ h+ t* P8 W. F. `' N 7 M/ x# n) `$ w. T) H8 C" P
( ]: ?7 z3 w5 w' \1 k 4 M2 m# S# ?2 v6 j
1 Y2 Y' L6 \ N$ d! X
3 Z4 ^$ D! e' G8 ?
" @7 V" W3 y" j6 N$ h " c. M; ^. ^3 H9 z5 @7 |
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
* m' h* O4 e4 e8 d 4 d- l7 {( c* T* h, N
9 [" n* g9 \! F0 t8 s . S4 m) f9 M; c) W: ?1 D) o" S2 h1 E
" U$ U" O0 k" j* H2 e) L2 y0 y
5 f9 D+ `5 E& r2 P ^) C$ u4 y
- G+ Y o# j6 x: w% K - p6 H7 A: s) l6 c: C0 K6 W- }
$ pm2 reset [ app-name ] # 重置重启数量
# U% C, J, ?* b) ^1 d( w% p$ h
& d& I! s, ]% H) l , T" K7 T, Y* U4 [
- L! ^; g1 K' i. ^8 ]( b3 Y
8 i+ q; k& {# b7 E+ V$ y
% ]& o* h6 i1 N8 h
P9 j, S- c+ W7 Y! ^- w/ X! d " I3 T& z8 ~* {0 Z R+ u, d
$ pm2 startup # 创建开机自启动命令 ' _& O- f' a) i$ j( U0 o2 v
* Q$ J ]) P5 b: L5 B: i3 [: t7 i
0 f& V! H$ K6 l* @$ G+ Y8 j/ c8 r
4 N8 q' D4 p2 k / c R) K! C+ U7 c( u
! U( r" P7 v5 d, d
/ s$ h9 [; j7 V; t, X& [0 K0 M' P7 K% g
! E$ Z, {0 d9 u7 L7 b5 G2 I
$ pm2 save # 保存当前应用列表 $ q; m# ?. c9 U! T7 K' E
3 i7 O+ m; M0 b) c5 ?9 p$ x, x
/ r) d, |9 C/ n4 s2 t8 ? 3 J3 |: g9 l F& F# T
7 U* I) E# s. n2 g8 ^( |, w
1 i9 l( ^- u* Q4 u4 Y 8 `2 R, B* h" ]3 B* p8 R) N9 W& f+ l# d
, ]$ n6 G( z6 j
$ pm2 resurrect # 重新加载保存的应用列表 1 m* l n# E+ J/ s0 m$ P1 [
( R+ C0 |- K! T2 w/ f
& _( [/ h4 N: M8 G3 p5 m( }
* r6 ^8 {) p9 }: E 8 k# v7 v9 s* h! ?/ x6 q1 C
+ p# F0 D L( {
' n; e' S+ {5 z$ f! [5 w* U, u' |
" j( F6 {( U$ ?, K$ S3 w $ pm2 update # Save processes, kill PM2 and restore processes 5 a# K$ ~# r4 F. h+ ~7 s% Q
+ x7 E; b0 C5 X) l
0 U# \1 A v1 l8 h4 G, E7 W
V+ f8 @3 l: T% K0 L" ]! a
- y* u8 h0 m6 k# w- ~1 w / ~: W& u7 L( w6 b
6 M% M9 k) \4 z" r7 Y# x
0 U4 v; R* g7 d. h4 P1 a $ pm2 generate # Generate a sample json configuration file
: z$ d6 g3 t2 b$ L: Y
% N% X1 B* p: @4 S 5 w, r! _6 A9 W5 Z U3 o( h
6 N) n0 j- G" w1 \. q3 r 举例:
( z( a% G& Q( T9 d& S 阿拉德的脚本启动方法
, \6 ?: k& |2 @6 n. m9 L4 r
3 ]) |7 _4 L( r
, [ x. a- ?! S2 g 7 A& ]* [: M7 B" C
cd /www/wwwroot/gmald/src
" L% W5 E4 Y8 d; M* a# _
* ]- M) d% f8 v9 v; U$ y# S' F0 T . y' K2 {7 h' p
/ y" K! R3 q# b6 V" T
" O3 u8 K+ ?3 n% v+ m/ _$ Y " L9 x" p6 y0 Y$ e0 `
& [& D4 A. H( r1 e- z* j4 I # _7 m' r A6 A% C' @
pm2 start app. js
' c9 v3 F- A; I; A6 R , X% Y. b$ }+ Q6 }* z
, E! P8 t! x0 n' H a
F0 s) s6 m$ d. J0 H 0 O3 Y% w ~2 V8 P' h) |" D