灌水成绩
等级头衔
ID : 1
管理员
积分成就
威望 : 8
点
贡献 : 9 次
下载币 : 434 枚
在线时间 : 1951 小时
注册时间 : 2013-9-5
最后登录 : 2026-9-16
方法一: 卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装! 方法二: 自己手动安装PM2 需要先安装npm 1 B- c6 {$ \- Z" t6 m" B
/ A( S) @7 } F
0 c$ N/ e: `$ e$ t ) F$ t( t. W" M: V# Z
yum -y install npm ! R2 z/ M1 S4 Y$ j* k
, o; T( h7 T1 R4 g" h
4 M7 g r2 {8 Y$ D* P& Q# t 7 Q( A4 a, N. Z% E# @# k
安装pm2 * @' C9 \, I2 t( i4 @
$ {# d; y( X+ y7 g* U
) N8 c# s6 D4 n8 [" l1 Y
4 K8 m6 X/ ]% F' m" ~% @2 W) i npm install pm2 -g $ K. I% U" I3 N5 c( k
" e7 @ C! d' l" R U: o
5 e# D1 [; X' d% }' I
' P7 R8 _$ z! ~6 H. Y @$ Z 添加配置文件
4 J$ ?* x; l1 ?( a' A% {6 o) z7 _
& T. v0 I2 Q& t$ U; d4 {9 L 4 o8 |4 O+ {+ A3 ~6 j
} x8 x6 h3 g vim /etc/profile ! e- T; [3 w0 O) z" f& j$ E
0 _: K/ \3 m$ E+ s PATH=$PATH:/usr/lib/node_modules/pm2/bin
- ^) A$ v3 W5 L( D S
3 G0 U2 C( S. E7 g/ |; Z" g source /etc/profile ( i# a# A, \/ V/ N: J
2 j5 u! ~! \) o; D
6 U" g& f6 ^- D
9 w; M3 Q9 M+ u1 |0 Y4 E' X3 M 测试 / R" u+ {5 w2 C! A! @
5 H+ Q1 G$ Y, D3 M, `) }( j
/ g0 @1 G9 A0 I8 e/ E1 ~
W, k) g, b2 N. d1 a pm2 -v 5 M6 V* ]7 M$ _2 v4 q
9 k e. b1 f8 d2 `" [
$ h2 I# Q) F) L4 i# T 7 U1 \0 P# s- p+ _4 k
查看PM2安装路径
# e0 t( m# V. l/ Q% N7 o7 R 5 m2 [) w- A4 ^4 a! Q
/ h0 Q3 y2 E8 P8 ]5 g5 G
; s( n* e+ R+ v! [ find / -name "pm2" , X$ h) u% ~% |+ U4 ]
, B5 J$ k4 M, C% `* Q2 Q4 j( N
" J) S+ {. \" h% q
2 `" j2 `) J9 C 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 7 c" K0 R5 U$ C' s/ L" X: M. S
3 L z- S( s' P0 }( o6 ^+ i
7 w4 K* i7 r* c & }7 A; A% A$ U7 R2 S3 |4 P
npm uninstall npm -g
2 \ s2 j7 t8 _6 {& L$ O
# u9 U7 l3 w' u* r ' N6 s7 E9 H& M
0 x2 r3 l( V3 r: X, \) e: [
安装依赖 1 a3 w( u6 b, q7 B% B$ z2 Z
! H, \+ ^' z" j! m
3 j1 \. [; m6 F% M
4 ^' ?9 m: _0 C0 g3 U5 ]0 a- Q yum -y install gcc gcc-c++
- x0 L5 u. h- r9 _% M 4 Q7 ]3 { A6 E3 V- ~
3 d9 O! B2 L' {6 u4 k- L! F+ i& s' f
5 F' L1 q8 `1 Y; G( Q 下载高版本的node安装包 * y: i3 J c) y2 R3 n9 l
$ S7 {! @' S' P
% k6 G- f* ^# R5 s, B- e5 s " t( o! Z1 K* y; x" F' z
wget https ://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz ) v" T, P5 Z8 ?
. L6 E# s/ f+ u v2 n; }
* ^& o* ~+ }# U" u( \8 U! u/ ?# R0 {& n
& a" X, q$ W3 g, ] 解压到相应的目录
! P; J2 F2 q4 w. ^% J! k% N! O2 E" x 3 }% c# E0 G6 K2 A7 d
5 g0 ^ ?( ~$ Q( N& f 5 O, |# T [( v. U
tar -xf node-v10. 14 . 1 -linux-x64. tar . gz
: k" m# R) j& ]0 M0 |4 d
# E4 g( [$ ~# W9 Q8 p
# y! ]8 m9 O8 D% W2 v: f
; [7 L' y( d; H7 B8 D* B 重命名
* y: Z% r/ i6 w1 t; r( m- \7 ` , {. K6 h' z8 e/ a$ F4 [; E
! Q* C* ~/ w$ | X" K) p8 o+ ]9 ]
6 B, A* p2 N5 w3 _ mv node-v10. 14 . 1 -linux-x64 node & j5 f. Z; ]- [; ~
( n1 Y7 B3 |' s. N! Y; @ / B" @+ B. b: X
2 e1 B) z4 q$ T" e9 T- n2 ` 添加环境变量(根据自己的路径添加) 1 t ~, _3 l& {, z( G( I& R7 w) k
9 L/ s# t. R% X* I+ {; s6 V
+ `0 a/ x" o( e ; j6 @: \3 [3 V8 o4 Y4 }8 P! O
vim /etc/profile % B, o' t; p( X- s$ C
. ?5 U% w1 U4 v K; I b* k6 {7 O
export NODE_HOME=/myinstall/npm/node ) `# U* X5 _1 S+ b! g9 v. x3 [! _
9 E8 h! i. d* F8 M; ~1 n, g4 t
export PATH=$NODE_HOME/bin:$PATH 1 W+ y) c- S: M1 ]3 B
4 o- J* k, K; n# Y, A4 N0 E
) l9 _5 O) m6 c" P6 O9 t1 i
6 `: G! I! j2 I7 D* S3 t/ ]2 y 重新加载环境 - C1 u/ Z q1 I" R" I3 y' `9 F7 v
5 b! b% F! @. I# `6 v
9 D. R7 `: |1 O5 c( u" P ' } R0 C( z/ i; ?. J6 l
source /etc/profile
# P+ U \ q6 n( w7 O0 P R9 R- n+ k 9 d" R) `0 g! Q H* ^$ j
/ H" K* {- B; [4 b
. `2 p7 a; [0 ^' q" a
查看相应版本 [color=var(--focus-color)][url=] [/url] 安装pm2 1 Y" b5 _0 ^& A; A$ g! o' n
8 p5 j3 g v3 \ # [1 H9 Y) j- ]7 V
) {0 m4 M5 Q6 n/ K7 B npm install pm2 -g ( ^/ F8 Q9 ^$ L4 O9 h5 C' y
) d$ ^6 R8 k- x1 `/ @" W
4 L. }4 w f% G, I# N & A1 [8 M! ]* d
检测
( n7 t- R, \$ R- C5 q/ J8 z3 @0 ` . K" o. v3 b: O, h2 }) q) u# m3 h
0 K, S7 k6 o2 N# {$ V
5 \/ N; Z0 \4 {; _0 }5 v0 g
pm2 list & B9 N% d) _7 f0 {# i* J1 T
/ U d) y- r3 D2 F" }) Q
2 x! Q7 K- f+ ^6 C % w5 A6 }! r- v& f6 W8 |2 @6 N1 E0 F
[color=var(--focus-color)][url=] [/url] 常用命令 9 a+ Q% u# l0 D `. P* S6 ?
/ v9 F4 R6 P) Q2 ]: w* Z
9 q- K, Y s5 F! N* i3 v' P
0 t- q: H* T$ t8 m3 B
$ pm2 start app. js # 启动app.js应用程序 2 U" {. o2 u1 m
6 t7 |; ]* E% g9 H5 A# W& F: s- c
7 _' J4 x+ z' R' ?! v
, n% t1 k6 C- q* i
" }2 P5 c5 x \ ( h# R3 z; j e' A% [; u/ o1 b
1 I7 G/ f& n# ~5 I 2 X* G2 e9 M% A% ~* W1 @- D" `
$ pm2 start app. js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡 % a. p. o9 }/ l4 {- d
. |# m7 R7 @6 c! u0 w* n2 e2 v( G
9 v* K0 j& q2 G1 _1 g. W/ a D
8 A/ k. c, v C! N / b" u( A; _* z# G/ f* K/ G
. B& Y" \" p, M4 n4 S0 e 6 `8 F# d: }% E+ u) V( W3 ~
! z }* F4 a E1 N $ pm2 start app. js --name= "api" # 启动应用程序并命名为 "api"
- P' R# w/ o# a9 U/ z: G6 l
, T$ C: k' [+ J
) ?. E! b, d* W; M, ^0 [& ? 0 _# T! e9 r0 v4 h" u, m3 B
6 L& i4 t! z: w* [, E
+ l$ n; p7 W$ c7 i3 `
T! K/ J. Y/ [8 L$ C) _
i/ p, {8 U8 P) w
$ pm2 start app. js --watch # 当文件变化时自动重启应用 . x$ e4 p" [7 k8 s2 i4 _; @$ c
, ?" E ~- T; l/ A+ E/ [( W
- j, n( x, D+ {- U ' ?( l3 `, Q/ p% g6 q- ^# R, F# z, ]
# y9 i! H1 E2 P* | 5 Q) p+ `9 b, t; s
+ U- z, s- s. c7 s
6 q$ J( S( t& \+ o4 R; U, B $ pm2 start script. sh # 启动 bash 脚本
9 A' g2 t8 a2 v3 U ) A- c$ x$ y) [& s
" G( @. t& d* Y8 u2 H, _) H
* ?5 L) @- e- L/ o2 b3 c
* v: o% L/ ^ o1 e1 B
. T* o( w, \! o" z2 Z9 `
$ c/ C; U" p5 y5 j: j5 H
7 Y! Q3 w0 B9 p0 h $ pm2 list # 列表 PM2 启动的所有的应用程序
! Z1 X* F6 \" \ Y" V8 o# H 9 H* z# @5 Y* `$ D
& `4 s6 f+ b3 ~5 Y; E % m% _ d- M- H7 j
, {+ ]1 h* m. l, g! }" E3 R ; @: }# u! |% u P( ?( Y/ t0 e9 E
' c$ k2 e! G: x0 k+ Y 0 d( L& j; h7 G
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
& _# W. l0 f' ]" t) _4 F, z
6 _ }! V W# Z
0 U2 a. C/ d( f8 g 7 t( A+ z: C% }( c" j
5 M4 i, p9 b2 e" M1 q% z9 d5 g' Y7 U
7 e6 i% t, e P% v/ m2 O* d
( K' ~6 Z. X L3 H
; J1 }& v$ |' ~7 I" W $ pm2 show [ app-name ] # 显示应用程序的所有信息 . v0 j0 i; X, j2 _6 a+ [
5 r* I3 x8 _+ m
6 w' d- v1 E O# o0 R8 P ' B# r! ]7 V ?$ G
" ]/ {2 z) L) R
1 ~% M, Z; B5 l- V9 x- Q8 k6 [
: [7 z, W1 L; Q1 ]
2 o- w( f7 d/ U8 i $ pm2 logs # 显示所有的应用程序的日志
r' l6 |- F( |# q _ \# s& ? 6 v8 q& D* d2 ?
! e# @3 y$ }! `- Q
# N* @3 T0 ]+ j( ~. c: o5 e
8 C/ n# h# \7 M4 u# G, |
+ _$ J& @% x3 q& S8 t - U* [) v! i! _9 O4 i" y
- e, X$ O' {: T2 C- c
$ pm2 logs [ app-name ] # 显示指定应用程序的日志
+ T0 |( M" T9 ]' U$ ?
! Z4 V2 w4 x! N& d' m! K
, m4 w. I+ R# [ 3 a; C( E( R1 e* L! x5 p9 v
, z# Q; r% s0 ^% C1 h: g
. F7 l8 d' S1 f. n0 X7 L0 q
- u% U% ^- a% [6 ?4 |8 m# Y ) x3 W @! N5 t, W
$ pm2 flush & C7 @( Z/ V* l7 ~' d5 X: f% t
5 n6 r& I* I" n/ \( ^6 E' @
Y1 x" p6 x, ~1 ?0 O/ m
; u* y, V6 T8 ]" t 5 H( @% Q$ m, ^ r: ]0 ?! \
9 V3 `3 n. D6 i6 O( q
Z% h. W8 o3 R3 u2 s+ [
! R# P$ e& @: p+ F& z $ pm2 stop all # 停止所有的应用程序
4 p. p% @. `% g# n1 T# U
. |# p2 U2 c9 L3 n# L, u
0 i( i4 _3 q1 r% S& p3 A* w4 A6 P2 H/ s
: F/ x: O0 q7 j, K- O5 U . O; V8 e. M0 U" C5 z) {# {
, R8 B4 k$ o+ q/ F9 [ ( B6 }' F! |) R, @. e3 v: A
) M3 i. H7 d. \! _9 r3 X $ pm2 stop 0 # 停止 id 为 0 的指定应用程序 6 J+ l* [7 L2 f
# u" Y& I& Y: ~4 S- e! S" q& \1 J" ]
/ x+ Z9 G \! l: q( m
, [$ H4 \( W* O/ ~6 d6 v& n9 d / U4 ]: n% f% ~. z- V. u7 c* k, E
^( o, S) |# d0 `5 d8 T % c1 q$ D# r: C( R! R
s/ z/ A3 c6 x; X
$ pm2 restart all # 重启所有应用 3 i$ B% H5 o& Y4 _
[6 {& I( r' M2 T( h/ Z6 \
+ j& e- M: V( O3 a: g# @3 b7 }
& ^4 W& F9 Y( L ?5 E
: X6 V+ Q( E3 o + [4 F2 t/ [+ D- y1 r6 d
; t7 d1 w! U; i+ ~6 E: s
2 o# H1 \5 E9 \: e2 u: k$ c* A9 g) a $ pm2 reload all # 重启 cluster mode 下的所有应用
7 h7 z7 I {3 J8 c' O# J # x% B; J- k+ R3 Y
7 x' ^2 I4 o q" g% R2 l
4 T/ O& M# G* `* q
( Z( K% f8 ~7 W: @) K
' H7 X5 |1 F5 P
/ `: q% a& R& G7 ^ z
' O4 D/ `$ `. U( V $ pm2 gracefulReload all # Graceful reload all apps in cluster mode
- ?+ K U+ T& K/ x- c
9 Y) a1 Y" H- H. t% @$ z
7 o8 R; ?5 [% B9 E4 f 9 ?6 M0 f/ l: k" z2 R4 P
3 m6 ?5 s4 s6 w+ G
" C/ \4 p0 H% e3 F8 P
z% \, M# {! a4 O7 B* f! f
' d; z, B3 j/ z* F% {0 ` $ pm2 delete all # 关闭并删除所有应用
9 z; U+ a) Z. K* N' R' L& K
1 Y. ^0 I. x0 W/ J. P
1 H4 h9 O4 w) v- y i/ A8 A O b
6 D5 \6 p# Q+ o- |# c! X
# _ x2 y' f" b: W* f( N ; f6 ?( X2 g/ F3 Z0 B- E9 e
4 b, e0 Q) b) \9 B, a; t, k* l
$ pm2 delete 0 # 删除指定应用 id 0
. N2 {" p- U/ S( Z+ T
0 t4 z7 B" a4 s! \2 M! {% ~# O 4 _+ X5 F& u) [- H/ J3 Y" o
4 U, X7 [: c$ A+ ~( _* z' k; g
+ }; i, ?" R, h7 L2 E
9 s1 i! M$ \' S6 Q8 r& k% p# S9 q# v+ Q
/ Y; L( r$ w. q/ t5 {4 x! [ ' l5 y1 i$ Z8 p5 Q, Z
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例 Q( d4 H0 Z/ E% z
+ p0 I! ?! K8 N9 d % H' m9 N3 x0 {9 D
6 ]; C* e* n8 S( o3 B6 H
. \: I c( `% @
1 ], N' d6 M/ x1 K5 w7 ]
' X# H' ~7 t! j& [# g
' x: i" W/ ?1 O: S- I% T1 E6 J9 h $ pm2 reset [ app-name ] # 重置重启数量 % _# G2 |1 L, x" g* v8 L4 ~: ?/ i
& J/ C% }2 K% t
i, b( a2 b2 Y# X# K) m/ V% l
! x# z( Y7 L' U# ]* |- S( F/ J, ?
3 y6 w) i7 C9 U U' W: G. Q" v * H0 Q. ?8 w& J* I; i
/ N+ L! f+ ~8 h3 p
8 E& A" j+ S; o5 x, X. w
$ pm2 startup # 创建开机自启动命令
& b5 }+ Q5 o& F. @6 @( T
: Z' W9 w- u: k$ s' z 9 n) [$ @4 r6 w
: @' G. e8 @9 {6 [
) G S1 o/ u0 C+ ^ 1 d) W, ?: V+ s! t1 q9 R
$ p' [0 I, y( d: w
8 ^; K. B+ i6 q $ pm2 save # 保存当前应用列表 ( e$ K8 h8 e4 l# p; a
) Y* g0 r& }% n- y1 r/ |
. t$ j M4 D( v, W
. ^4 I, ~2 j' r, n. ]& Z; u. T
, Z$ X# A2 T; F . |4 A; |: @" @3 I5 h7 }6 r
) S; a9 [: F. u( H
9 v$ T X. l" z; p# r$ ] $ pm2 resurrect # 重新加载保存的应用列表
5 }) x- t" o/ X 2 E4 x' K$ D" k- Y( J1 \
, G/ |) w N2 [% X7 z; S0 q m
* p8 ]; A4 F' ^- f9 i
4 k0 _4 [4 J' P: P: G4 |
# P" Q+ D$ `7 m * r7 e2 S3 f G8 J+ S! r3 p
1 V( Y: j7 L# i3 k: X8 F; p& E0 }- f $ pm2 update # Save processes, kill PM2 and restore processes 3 H; M* r& X, }
4 R* d$ @ z+ u; H' I& t
0 i+ q: C- ]; w2 z, c; Y' ^
, H8 W; t1 W4 Q, v7 H/ `7 C8 A
7 J, H$ z1 d' ?% O3 y; B8 O 2 i }1 h y& K# J9 ]
4 s' W8 ?5 a( Y8 A8 z: K - L6 F4 h7 d7 k9 I" W3 a% u
$ pm2 generate # Generate a sample json configuration file
3 `, Q/ s4 Q; B3 l2 T " \' P5 S' Z7 K2 n u. ], T
# b; u: V4 o i
3 f0 q! W- ]# d; {# v 举例:
! L0 q# S! o8 u$ ?6 D* d( ` 阿拉德的脚本启动方法
) Q2 W. J; l, A
( F. J2 B+ G9 H" B$ M7 d
2 P+ z- b' `$ e, U
2 T- L7 h# T" s cd /www/wwwroot/gmald/src ; W' h- ?2 V9 k* X8 T
1 W$ P) ?" b1 t' K; G
6 }6 h' S: n/ D$ L6 k1 N
# S0 y/ I* j2 n- b1 H; g: R
0 t. d$ S6 |8 L
+ l/ H( L+ {: I$ Z $ k' z* f4 o7 R i( x! N" X
+ I% m G: e- k) M F1 M/ K pm2 start app. js , E. a; E/ V. Q4 }! |
M4 K; g3 t8 G9 J# ^/ c; N
' F$ Z1 @5 H' M) {5 v* f$ u, t
, W, y& ^1 Q" N + i. D1 I) M* j6 Y