灌水成绩
等级头衔
ID : 1
管理员
积分成就
威望 : 9
点
贡献 : 9 次
下载币 : 377 枚
在线时间 : 1642 小时
注册时间 : 2013-9-5
最后登录 : 2026-6-7
方法一: 卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装! 方法二: 自己手动安装PM2 需要先安装npm 8 _- }9 A5 A2 r# [0 q0 h
/ e- j9 f$ _4 E
8 Y; [8 l2 L9 V* ]& h8 z % [/ j) I/ ~' R# X; _
yum -y install npm
4 Y4 B" x) Q% ?0 m+ H# M & `( o7 @8 f& B. Z& X2 a9 ]. i" Z5 J
9 t2 @% }: }1 {
' D6 c! v' M& a8 M) B+ N 安装pm2 - J! U/ R+ ]6 }1 N" |$ Z! z1 a
T V) x; W$ `4 ~# r( @ 1 q/ o: i$ E b
( k- X7 a& L! r. l' S# {5 O: u6 g
npm install pm2 -g ( D* p2 g% v8 Z3 J& O# Y- o
# s# m( V& T- t8 u w% O$ i
5 h8 ^7 n: p# v/ K: t l - D4 l5 g: f m, b7 R& h
添加配置文件 9 a8 x2 f) |' S5 @: l. u/ f
: d' x- b+ q7 q; A6 P & I: ]6 Y# U, F$ b/ E
. v) d7 ?2 ^2 W; [7 d3 D
vim /etc/profile 1 X! H# D! o* n
y$ {+ T$ j1 E: v; Q. c PATH=$PATH:/usr/lib/node_modules/pm2/bin
. ]% B* R: m9 j8 Q6 J3 g2 y% T ! I. A& H: m3 v( s4 f
source /etc/profile 2 G9 _+ F H: `
! Q( t8 w' S) p* e) t" n& U+ J" D* j* e
( W( g$ x1 D' m# T2 f! Q9 r - u) ?& s4 ^: w* b* ^! k* e
测试 * @- q+ Q- L0 h* ?; W# p: ?" L
% \. |3 e5 f5 W- B
1 M, H7 Z9 M9 e& ^
' X4 Q! P9 i) l6 d; a& E9 `
pm2 -v
/ N* v7 b) N( a6 R; R- T' h
" Y a/ O$ ]6 t) L% E$ S6 n% Z4 h
: C+ _* n! f" X b( t 9 x: ^0 b6 p( |' q
查看PM2安装路径 2 R0 Z$ P0 f5 z
1 R% X" A, Z' { j ; I! Y8 u+ V- j* D* n* k' k
, ?2 t, j9 G# _ X }
find / -name "pm2" 3 y2 u; q0 W: w7 ?0 q2 g- I" B' x/ a9 t
9 Q2 v2 Y9 ]# a, X+ ~5 q
2 u( W8 q' a4 y# k u8 M % F( @ \ G2 u5 t5 Y( O0 X7 W4 E
根据自己的安装路径修改配置文件 [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 5 o1 _' T j8 k8 u/ l( f8 O
3 \ X0 A9 O; e# \& S G
- u: }5 n" W1 `% W: P3 q
- D3 n- n b8 H* y( c' I& k npm uninstall npm -g 3 c. o. r7 i" g+ d! P
. r( k, j' {; `9 E" D6 {( Z
- n8 \; ]5 E; J, c1 s* _7 l( P 7 T* G- S) H4 b$ Z
安装依赖 # ~0 f6 I- f! {
1 f, [7 G; w& }: _: M
4 |( t% X) n( d2 v
% `) S2 K' K. h' l yum -y install gcc gcc-c++
* K. F! G q# ]5 }. B
9 e0 I. l. M- |6 _- { 1 V% D6 P- j# e2 A* d0 L
) e/ p0 n2 Y1 X3 q7 f1 z5 z5 u
下载高版本的node安装包
( _3 }) R! q5 }' Q1 y ' G4 _ M. O3 h
$ I6 H s9 X( _* S- O! ~- t
; U& h1 D: q+ e, L wget https ://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz 2 e" z) O+ D$ O& e5 a2 A: O Z( `
6 n- ` \9 P& W" z
I l9 ]) {* e9 X6 u4 e 1 E, G% k! o7 ^ G) E
解压到相应的目录 " `5 }, G6 m1 ~9 m+ H4 R. _
2 U6 y g: z& q! [: }, C / h: d0 a$ @9 u8 T; U( |5 k3 r
0 D9 K g) Q2 J5 X1 J tar -xf node-v10. 14 . 1 -linux-x64. tar . gz 9 _- k! l5 ~/ M7 \( y8 T
+ ?/ s( {+ V6 j8 ^1 _; G* o( V* g
( j" H2 |9 J8 J: ^$ | 7 _- |4 a6 ]7 N7 S/ S) K5 o; @
重命名
, F" ^6 Q0 }1 O! A9 {: a 7 ^' L' C ^$ b
5 q' P* t9 [, |1 A2 ]! w
$ s3 d# C9 D, [/ i! E
mv node-v10. 14 . 1 -linux-x64 node & }& E) }7 ~7 t h. o
* t5 i: O/ u" F4 u) ]5 P$ P . {, O, A. J3 [* \
6 O/ u; r \( a. _5 a! H% s
添加环境变量(根据自己的路径添加) ' J& \/ {0 t. `! D$ l
/ B& }5 w9 `/ \( D7 i
& F! R( V8 n$ `
5 s, b7 v& q0 z) ?* W vim /etc/profile
3 E* d$ o. l) X8 U # z5 R6 p( y( }
export NODE_HOME=/myinstall/npm/node 9 D6 j! \9 S8 c- e+ {7 A9 [
6 O. U, a2 x3 x, n& c export PATH=$NODE_HOME/bin:$PATH / ?" T% z& E3 x1 S8 Q7 L( r
8 g' T0 _' v+ w) u1 q
* [0 \- s1 u! m9 p: X' I' a 8 B, q$ s0 W1 [% O
重新加载环境
4 [& K& t( @, [6 c9 n ; F8 N% V7 P" I; @) i) Q
0 D1 ^& G9 b6 ]' ]6 ]% Q8 i% C
% v8 F- N4 D& v& h% d) O
source /etc/profile
2 e6 ^5 [ I. d) a
, H2 S5 D% \# H" Y7 o- B9 Q8 x ! p6 ^+ H. _$ R$ ], u0 ^
. _/ N- ~, V9 X 查看相应版本 [color=var(--focus-color)][url=] [/url] 安装pm2
+ o- p* n- a t- A6 l
' d, G, u S- R1 B
8 `2 `- \3 w$ Y6 e6 S 4 H$ Z* G! W: j) f5 N$ z ~
npm install pm2 -g 1 u2 G! g* E& R) B8 [6 r
0 [* {3 ?9 S3 W6 { Z
. ]# @8 n+ M1 R0 h7 P
( S1 P4 F( p" Q$ J 检测 + M- H; U0 E8 e% d1 f+ [% z
s# |: B a" d1 U3 D $ a' R6 a0 r: h( w7 U3 a1 b
$ B" i, [1 t. D' q
pm2 list + l& i& t" X( X E3 c* j# G
+ m# g7 ?! G+ P" j- L- P: K3 e
) S% z s# E# j- o6 E+ Z9 R6 s ( C& J( {0 N- V- H- Y
[color=var(--focus-color)][url=] [/url] 常用命令
7 U7 b2 F- T- }- G, C
L; y0 z& X+ }# G1 u0 U1 A
, D9 e: ]6 x- M: K# M5 R3 Q, n' U% I ) J0 \7 ]3 _0 J+ b& i; b
$ pm2 start app. js # 启动app.js应用程序
2 b: u4 K/ O6 f
4 X- P. a& H% P) c3 f
3 L' O, d! x* T' n& V l; [5 ^9 ]& V
3 U, |" f( T/ G) Y/ m ! m T; s+ F& s, j! s1 @1 P& W" b
% K. }+ o/ X: V0 x6 G
! @; e# o7 a5 D- i
$ pm2 start app. js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡
6 P) w \& @, z
( V) Q4 W9 k1 a# }4 f" N' Y5 }
+ i8 {4 K/ |; G1 i D) h9 A6 L4 }
# {3 J Y; N/ P% n* H4 h/ @" }
- y2 b* G: J, K8 \ / H+ ?& r- b% ~8 r$ `. p& O3 Q8 d8 e; z' N
: T% I6 y& ^7 }- e. V' [' C & \7 I8 ^8 t* s# N2 k# ]1 h6 d+ B
$ pm2 start app. js --name= "api" # 启动应用程序并命名为 "api" ' ~9 [1 L! j! M' H$ f! g2 f, B4 I
$ h& K: g+ O; b! I9 D2 z
S$ G2 ]9 d! E! p" \! s( ?
" ?2 K/ {- ^) U4 y: l" H( a' L
! J& l+ G1 O- y3 g2 T9 o
$ W7 Y1 F- c8 _& d% X7 a
: r" x: E( {1 K. e& Y7 X
: ]9 P" A: S! F2 j: U; h# G $ pm2 start app. js --watch # 当文件变化时自动重启应用 * R: Z0 w, m3 B1 q \" n* j
6 B+ q0 j1 d! U0 L( V7 a T T- Z9 }# v$ H2 D N
0 L# z+ R2 C# _8 v* v
+ D+ \5 ?2 l5 p( p3 T3 W
1 L% s% K: ~7 m0 \
; e; E* u" J, f
$ ^ o [( E, K% M $ pm2 start script. sh # 启动 bash 脚本 7 _4 f. l3 J7 |4 h9 i: d- m
' W& M; N; ~7 a$ @( ]$ Q9 L
9 f) s' A& Z3 F7 }+ q J
+ s! |" u" n! X4 d! R4 H . L$ q5 s$ c8 t0 f' Q
: W" }8 \, W6 D1 N
7 M; H* W/ Y- C7 @% m
1 `: \+ S% t; @/ b
$ pm2 list # 列表 PM2 启动的所有的应用程序 % k# R: X, g) T
' |6 {% G* o* @5 {1 c
& {# Q' f. s, p' r
' h& `1 a- l' i
2 ~" F& ^( X. e- M3 b2 C
& \+ c+ l) Z& s, D- Y+ g0 ~
# N( j2 x7 S+ _ `8 F8 u$ X $ n( q) t0 O8 E) b3 M' s
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
% p: S" F$ G; _4 j3 \# { + a7 J, y2 q2 f$ V- A9 w
% O ^9 b& Q; j' `
# [$ v; x/ E& T* J. o% e
y8 }/ }5 J4 k # D+ V6 Z# e' a" Z0 Q7 o
: D* ?- ~. L( i4 Z# C
) E z3 q0 n W3 y3 F4 n! V- Q, [ $ pm2 show [ app-name ] # 显示应用程序的所有信息 5 X5 \( U3 b& V. x# c( x, a
0 ?, D9 `% a5 F, L. u+ p# H
, K) e- V6 \' ~# g
: o0 l ]6 o% B) x- G
7 D1 z8 }- q1 D
! r/ S$ p9 _6 V3 Z! r1 `( W
) u2 m3 X* W. j; p4 E3 O 1 M1 \5 [1 s8 f8 X
$ pm2 logs # 显示所有的应用程序的日志
, Z* T% s/ J f& Y( y- J! {; S 1 H$ q2 |# J& ^
/ p w, f$ w9 X
- n5 o1 M+ e' _% o+ D W/ k0 R; \
8 [ W5 _+ _) X/ h8 c
% f$ c6 B" ]3 ?5 D1 r
/ W* P% ] V: E. H; l ' N @* ?1 P6 o& k+ Z% _7 w
$ pm2 logs [ app-name ] # 显示指定应用程序的日志 , ^2 M1 j) Q& L5 p9 L6 c
0 ]1 Q/ O" H' k0 d+ _( k$ i+ _3 a
) G5 ?1 T: X9 {+ V/ \( t- ~ ! V5 Z4 v) ~3 h4 h/ |( l
. e' J3 n1 N# U' O
8 n5 k! y% u% l# q. Y& Y: {* Y - o7 Z' }8 Z$ x
1 m# `% ?! t0 j4 W $ pm2 flush
" h( l/ Z: ~$ w 6 d0 s# g* |5 s7 g' }
$ x1 I& J( {6 F8 F3 J
, L7 A/ e4 Z$ Y; |4 ?. t
9 W6 t, U% a- h6 d$ z, W* f$ O
+ J5 s% ^- }( \. d" U
3 O- q% X$ f7 B4 X$ N8 V
/ G/ \; S: ^2 S6 C- R9 r2 x $ pm2 stop all # 停止所有的应用程序
1 C. E% |9 g6 |. g
/ Y( h# s; V4 ~3 X( I& { $ g+ q0 `$ o. G2 y3 H- H9 ]+ S
3 f! J6 r' \6 ?9 r x( {. ]: L& i
/ d, T" C H! w) K# |! Y9 J+ k4 \2 G
3 @1 Q# L1 w! z# D- o8 y- a1 j 2 j: M7 Y1 y( o" C' \
$ pm2 stop 0 # 停止 id 为 0 的指定应用程序 : q* h G, A# E( {- y
/ f( ]$ H$ |1 w6 L ' u. C5 E) j9 y3 j6 J' D
1 ~8 p0 c! T. Y1 X1 s5 ~+ C
Y8 z+ C- q2 X* I/ k) n7 A- Z
9 k) ~ W" e! Q3 }
- O4 W: V1 ?0 r. q: s" G; I Q) P$ ]* w; \! L/ O
$ pm2 restart all # 重启所有应用
3 l3 f7 P3 F, z 2 y6 c; U$ m7 A
5 B& ?. w- p" x/ `; d" H! y* b + L) B5 u" c& i; k. {
2 K! C4 A- j1 Q) s( s * R* |7 X, t# |+ \
R; ]2 t$ `, d. A7 k5 Z. \, b* E
y0 y3 M1 e0 k
$ pm2 reload all # 重启 cluster mode 下的所有应用
2 H+ \! @$ }, D9 ?3 |5 L0 T, U
/ \. k; {( D P. {7 a! P4 a : i- E0 O1 ^- O& V" n4 Z7 G, G, Q
' z2 N, u* U: u# L! ]
- p+ }8 |" f( N
/ x; k+ s* O8 |- ~ 8 P( H, j3 h3 [" i
# Y. k5 Y7 t# D9 c4 u
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
; [3 b% Z, c0 F5 j* Y+ \+ ] ! m8 u3 d6 `% O ~( {
2 v E) @: ?6 ?8 t/ P- M
4 D& e- i1 b# w% W( \* z$ K
* m' {$ K1 W7 q" M# ?
8 ?1 E# Q6 D$ M
( b/ K7 u) U3 ^- f + u9 Y' @1 i& _) H( ^" M
$ pm2 delete all # 关闭并删除所有应用 4 ?( A9 k$ ~. l2 v
. A5 l3 z2 ^: P$ C& o% g! y- W
* N6 z: I" I/ P4 E$ C' _& @
2 m8 ~$ f& F% B1 B7 O6 z8 E$ _' X ( R( E/ b) r0 k9 x
}# r) ^4 T4 B( e7 S
& u C: c* F8 P" ~% m( d c4 a
6 i% {4 J4 Z* w2 R& S- @( J) f $ pm2 delete 0 # 删除指定应用 id 0
6 ~% y2 Y' |- x& J! y" k% W7 S9 ]
1 V. X5 E3 w" L- s4 f' d$ j - i1 F# e7 Y4 G- ?) |: I# z
) x- H- z5 H O: H( b! }
" U- b ]8 T, ]1 q* \4 W
! D1 {/ g, a# U9 W! T+ h/ x# t ' M8 g3 T; d0 E) S3 i4 M9 N( Y
4 }2 j6 w# F/ k $ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
, w# I4 n+ V8 J D
0 s- S) A4 n5 {; r9 y! {+ a$ u0 Z
* X. J. H" L: a7 e3 F" i
7 t. Q" T: i6 J" ?
7 W$ U6 ^, G% B9 L
; i; o1 E% a- I7 i% g0 | - q& O/ _$ t4 _8 ?6 F
* r& g! z. \/ i5 W* d' @ H
$ pm2 reset [ app-name ] # 重置重启数量
" j! b$ i7 c9 _1 ^* L! w # n0 P; J. {6 K- ^8 n, s
. L% w% q- t6 ~ ^) T
^' y$ N- t% }' q. i8 F
) Y3 I6 v" P1 _ i. ]. e
) {; o$ w4 l7 w5 o( A2 ~; l0 j : N3 e/ [- V) }6 l! \* S& K5 i
! c# r5 z$ H( ?" n" J- t/ D
$ pm2 startup # 创建开机自启动命令
9 v+ @ _# W p+ B% s
7 s$ P3 z F/ Z* H( W; i8 a$ g
; O. [% F' e1 |( \# f' H1 C
, j7 d) ?4 C! Q7 O' ], ^ d4 Y' H 1 k1 W4 O( i/ X: f
2 S% n: l$ O4 V ^! X- M [ # G! f. a3 y! G" x3 f
# m- l% w8 h! V) p4 ^# X $ pm2 save # 保存当前应用列表 . t) ~# ?+ `6 c q+ o
0 x% n( Z( E' j- Q9 R) _, j
4 @2 G! D3 a1 D, ^- I) M" {6 }0 a
+ R6 | N4 H7 p9 j( D# V 5 z# a/ O. T" o/ T! C
; @1 A: F8 F6 D
" l9 D) v" `5 b+ w4 _
6 {: ]. ~# P, @- b) Y $ pm2 resurrect # 重新加载保存的应用列表 9 }+ H% J, W R* m& ^( N" c
, q% _! ~" \+ w! j: O% f
4 M+ y! e6 P) o$ A' l+ S; c+ y
; z' I8 W2 B1 v' [2 E* o v9 C0 x" j; D: w N# t
2 R3 Z, }# E; e" U5 I4 E$ I
. E! Y. V2 j+ ~6 i" T* O3 m
8 j, O. J* ^0 Y9 U. e' I1 T $ pm2 update # Save processes, kill PM2 and restore processes 5 q# T# n% F* m" q. T! N& [
9 E$ D, k5 u% e9 t E: k
3 G8 N# L- R) l% ? - h; `! e& s- Q$ k
" }2 G; l j" Y5 q
9 f( Q0 b* z- F ! p4 g! e$ l7 `3 Z8 R* k7 A
0 |0 K0 Q, Y. a* |: ~$ a
$ pm2 generate # Generate a sample json configuration file
1 |/ M3 N3 \4 P C9 b3 }" ?" t, d3 e' G
' z5 n& \- {" F$ V: T) G
8 s$ G$ M1 m) n9 S( x 举例:
7 L6 E0 u' U1 H 阿拉德的脚本启动方法
0 @) F# @# p' q# e
9 U* b# F' S3 C' M* K " v, c$ b. `: d w
8 r6 N$ ~! ^3 W U5 P! ? X
cd /www/wwwroot/gmald/src / a4 f* n$ |' C, W
( q1 N! x7 L8 L8 {* q
" V% C. O! l) k. r5 w
9 ], E& u5 A; o, g# Z , n, p7 f$ d6 @$ _ ^" g0 F
2 y% |7 `- H4 L" f7 J m
. o @( |& o4 t* ?
2 v; m. A/ d @8 |. f% F) A6 I
pm2 start app. js ( i0 M8 }4 c# j9 g
& {1 y+ u) ~/ ~4 u! A. a
' C2 t& E6 u' n 8 a9 R8 v4 G+ Y6 @2 X. E
+ @) v' j8 S: w3 y+ c