|
方法一:卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装!方法二:自己手动安装PM2 需要先安装npm
! Y( Z& {3 k# t% Z6 ?/ F6 \: ?; w) g7 ]; `
7 g p% E# u7 Y4 | b' A
) @. t7 \1 @0 s3 Y# t! |' y" Hyum -y install npm
, L7 w! @( c) g' D2 n# l6 @0 [: ~2 C l# z2 _* H
0 P* Z7 M2 a3 C6 q5 n( O6 t
2 ?# e, o4 F0 |( w安装pm2
# v( Z0 G( I! e1 k# N3 A: F
6 I! L1 E: q2 E- B$ D1 e
! t7 g2 J' s; \8 L. G) T* W6 Z: |: b5 {% ? `" s
npm install pm2 -g
1 g/ D- i% {) g5 C+ \- u5 X, A6 M! L, v" V" o h
. q- b8 |1 N" a$ _5 l: n3 q
& B/ M* h/ I2 W8 N
添加配置文件0 [: {! C8 W p. R; v. |' b( E
% O7 d" U9 O$ ^- c9 ~! i
% u4 V/ l; E& L( i, B& K. I. q5 Y
) |6 l/ ^3 t1 n' ]4 l
vim /etc/profile7 x% e' y1 y% Z
( i- j. |& z/ n4 u b4 ~PATH=$PATH:/usr/lib/node_modules/pm2/bin2 o" \5 [! L) I) j& t
: ]0 W R0 S1 g" N2 D& n' P* d% Ssource /etc/profile% _' s1 a4 K! } t
! i) Y5 p! ]/ b/ D- [$ {
5 ?- x- p: H& S, p: C3 p7 T5 H0 l; h& t( @& Q% P9 |
测试
; f( V( o/ P3 w2 V3 x1 M. M
$ R) q) X6 }. G" S4 |" b3 m, m- [8 r" f8 V9 N
; s' a5 O1 C5 ~" R1 ^4 c7 w% P. o! ppm2 -v3 Y y) @+ a7 ~0 g
* s/ g" h6 G2 ^. Z. r* X6 j; y) f8 f
0 {4 j& @/ t8 q7 W- y; ^+ k
# z* `1 x9 }3 i2 O
查看PM2安装路径
0 D: W% Q9 x2 _
& O5 q) S" Y' ~. u" f1 n# a9 P7 ~( K: _) s! D
+ c4 K) {) g( ~
find / -name "pm2"
. P O$ o& r# ?
# L, t3 K; z N- r# p6 `* `; x
8 a1 \5 k' X4 T, V% u' j
. e. G3 k. n1 R' @9 j" S- f- ~根据自己的安装路径修改配置文件[color=var(--focus-color)][url=] [/url] 可能遇到的问题[color=var(--focus-color)][url=] [/url] 问题原因是node和npm版本太低,我这里版本分别是3.10和6.17 [color=var(--focus-color)][url=] [/url] 解决办法–先卸载之前的npm2 \. X1 k. P7 |; r! ?; {" ^
. V+ s/ Q3 ^& I( \2 c
' }; e% k% n% ^5 b [* _$ s
4 g# y/ S' d! a ]! v3 unpm uninstall npm -g _" z( q* m' M, ` J Y
7 _7 F4 q8 [6 y
+ M; |& R9 N2 e# w
% r/ T! j0 y' `% }9 _
安装依赖3 l A5 g, f" i" _/ [2 r: G* _
; d" C# n% [" v6 b/ t
( r% ~' K+ z6 T# V
/ @6 |! e9 c1 l u4 k; e
yum -y install gcc gcc-c++* o4 @" M: g6 `7 Y8 z
& J/ x6 O) P6 l0 {" I4 e
u( `* T/ Q9 C4 ]) _+ j3 S9 x1 O: k8 p0 X. \- o: C1 b
下载高版本的node安装包. A7 {& Q$ d# w( g0 _. d: M
8 M! z) ^& Y$ P$ @
# R4 L+ _+ B, ^) x8 N1 N, W
8 ~/ y! \; U0 m7 r7 {0 P: _1 J* Awget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz6 c- v# d7 {8 c2 ~+ J F5 J6 g* r4 |
8 x! H$ e) v$ C! A% K3 ?; D
, O9 x, e- p: U, a# T, s" G2 y
" u3 e8 O9 k9 k4 ?
解压到相应的目录8 v! J' t, e1 l! n/ k
9 e8 u! y( x$ N# T1 u6 a
( M O; v4 A2 O2 d* B; H. H8 d/ g3 ~& N* ]. y/ J* A. ]
tar -xf node-v10.14.1-linux-x64.tar.gz7 p; [( s5 Y2 z+ v, V( T, a
0 f/ n% f7 Y1 p' _( r5 d6 W$ y- g D* V
9 R0 [7 j0 F" H/ Z6 p$ B5 S9 W重命名5 u9 m2 ^ m* [5 w. V1 {; u9 d
) R0 P4 [4 d I3 V7 H& Z3 s1 f" o6 J! b+ j( t# W
5 |3 M2 U% y: l y3 v: t( Y( x7 r1 ~
mv node-v10.14.1-linux-x64 node, _9 J/ B0 y( b1 W
0 c+ f& A% ]; G4 H. k4 H
( d6 n4 Z5 z8 f: V7 V; A8 ~! y- `" I9 k) K0 I, ] s
添加环境变量(根据自己的路径添加)+ u8 O. C6 S1 J- \$ p* r
9 P f& Q g7 u0 o: \; ? F5 R. [1 J) D% v" V6 f7 v- r
& v1 [4 ]8 e6 v1 W0 Bvim /etc/profile2 q1 N5 b0 q; ]. I9 z7 C
. Q% o1 s2 M& ?/ w7 jexport NODE_HOME=/myinstall/npm/node2 z9 }; P! @. B
& s$ i) s) I2 f4 k) a1 e* J; I
export PATH=$NODE_HOME/bin:$PATH8 C" o3 \6 l/ I/ K# j' a
. }$ O# G9 X5 e. f! a/ N" ?* P
0 u: y S+ Z7 f4 P1 D
) `8 k r# o; J. \* a0 S重新加载环境# P+ T4 }7 q$ i8 P+ A0 }
2 e: M+ |1 r6 g7 l
4 S+ V/ W+ m1 d8 ^1 Y
+ s5 Y% T$ _8 asource /etc/profile
' V9 {: R( @" H2 N/ m5 H* T
5 @( d9 G" @$ h# k5 p% k" [* e
4 s8 x0 D' g0 ?0 w. K) ?# n9 e
) S ~) x: C) w* p查看相应版本[color=var(--focus-color)][url=] [/url] 安装pm24 P7 ^' ~% B4 Y c' X
0 F- G7 M7 m$ P1 k; b
`2 a6 ~$ Y5 i' R, i2 w0 ~' H' G/ C# q) n
npm install pm2 -g
5 ?& c! B5 M1 Y* e) Z
x0 r( Z! i8 J9 ^" t6 K% b
" c* N; L# N3 F! g1 T
% s8 N. I* ~5 W5 v0 y检测
5 R' s$ b& N& g0 A9 A) k' G- k" A2 C, ^ L- t
! F7 [/ Y& ] B( L; ^
# M5 s) C" M8 [5 l
pm2 list
m; Z! i, \+ r- r' |" l# c. @% j9 ^2 u; f9 m8 k) `/ w
6 v# H# o0 l" Y3 d" u% E4 R: D! N* D
[color=var(--focus-color)][url=] [/url] 常用命令' M' v' F, z8 v/ J' s+ L7 P
5 X% r9 x; o" d8 C; O) ^
& ~) l. G. H4 a- D$ Q. |
0 E: \: I6 U+ U; c) @4 _; ~$ pm2 start app.js # 启动app.js应用程序
6 K: n5 l9 ~% P5 t7 A7 I' k3 S$ `( Q/ \) }+ u
* K; d9 R7 q4 e
- M' t9 Y( ^; g
! p3 `+ z, c7 d3 y# z
# z( h$ [6 y" r8 a1 q; E* ^; A, g' }$ L7 J. [. b
, _' X$ E- a8 v" v$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡
# B7 y2 Q) t% }4 o& C, P" s0 D; X/ r- z1 d, d0 S& t* C* s1 C5 h
" [! P0 b6 O2 T' n( M
0 l" ], c" W3 k# |2 X0 e2 P. B$ g) e: J3 Y2 f& C3 m U
9 y X: i, k1 V! W/ p
& U7 W4 c" P6 h% p$ N6 l$ D+ U
0 e! e" Y: Z/ a9 U& g* S
$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"/ t% ~+ Q' j K# a( E4 Y
- Q1 n) K7 r7 h$ D9 Y/ `* u$ p9 E6 Q3 Z# B
C+ T' k% D- ?2 L& T- X+ A0 N! P( p4 {3 f( k) I2 p. m
+ v' ^/ X2 A1 D' L$ l3 K! u4 R; r2 o# O3 [! q+ ~( y
: j5 F# X* N7 M. d' [$ pm2 start app.js --watch # 当文件变化时自动重启应用8 Z0 K0 C/ e7 u- F& V- V
8 V3 p9 M+ E) ?9 a' N9 m1 ]7 P* t7 X
6 |, Q0 ^$ f$ I! r: B+ Y1 }/ Z" T8 X# F- Y- S$ P
! @( R9 z% G- O' }/ Z( S
/ u: A" r: c+ o9 c2 w+ m2 t7 M" i: Z7 C+ \" L/ X
* ?. K6 E# C6 b0 \# T) L% [+ G* k$ pm2 start script.sh # 启动 bash 脚本
$ _; y9 y5 ^+ h8 m$ |! Q9 M, C
# K; C& @- }+ O5 @0 T8 Z z; U7 X
" _) O- E- n; O; k& }9 \8 B ~
: C) e3 P& h/ F; A$ i; O/ B
- P/ W. K' W1 m* Y
5 h e( n1 K9 R: j0 |1 R$ D0 t) A6 z# C" `+ q% B! F
$ pm2 list # 列表 PM2 启动的所有的应用程序
. P+ U; \" @$ R6 L; c* O
+ Y* \( U' o- \% G
4 F' w" C5 U9 }( {, m" h8 ?& f. S8 j
7 D! e6 ]2 V9 [( R$ a- }2 U; x8 N, X z% H* G0 m
9 ?4 T( K7 S& L( H+ ~1 P3 Q1 j, \; E# X: u, \' S
" J& C8 j7 s% o3 {( ?* Y* R
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
g& A% r- p( p4 s7 f+ C1 B! M2 @1 A& _9 S. m$ P
! z" ], M M$ S1 R: W+ k J
# ? j3 F& | a& a, A, }1 r2 z
7 E$ j' w9 b* p @9 q( F$ x. _7 U) T. E+ Z5 s7 C
5 B1 F& {0 M$ G8 d8 h9 e2 @
& X3 C' H# N6 W% K$ u6 a5 v. ]
$ pm2 show [app-name] # 显示应用程序的所有信息
/ D0 Z/ S8 W6 M$ |& M' ?, M, S P2 d2 _; S0 a3 @
# a& x& m: `9 r: B- _
" k* F% Z6 r6 w6 A# V2 b2 D) i6 ~1 O2 i# o1 V" T
2 F1 @3 n) U% D" @' L$ s7 v1 J# r, L5 v
/ Q- [' v0 l* @$ pm2 logs # 显示所有的应用程序的日志: D T; z) J. M+ g3 t7 \
! [! t3 O: E. b9 e$ H" L l
6 V0 F$ G7 w% d a4 o' ^( _3 l/ _, c" N1 D4 R( k
: K1 Z' \" M4 a" f! W; A
7 U/ U$ n3 g T9 I" l& {) C9 b! F" } ^, f5 H4 Y
; I8 Z' \. n3 z t4 y% N) N. T$ pm2 logs [app-name] # 显示指定应用程序的日志$ e5 C3 L# p/ J1 e8 x6 d$ l
7 u- B* T/ D# @' Y i2 ~ x% U
- e1 a; ?# u) Q
" O; `% I# F0 `1 X' ~) p# V# X, ~
1 H- J" l# N: X5 |- g4 t, z: f1 i$ J
1 Y4 ~+ @, X( X, `' K4 z" _: ] ~7 ]+ X/ A% t' P
$ pm2 flush
+ J m& k, `5 T# d7 g& ?8 v# f- f# N7 `" f4 I
1 S3 `6 R- h& F+ C' F5 J
9 U# `2 [' n: U& b5 |3 i
: \) D$ {0 k8 r* a% B+ J4 C( v7 E. I0 s7 x* `8 j- V0 F
4 F" V Y3 m% E! ?; o' r
6 L- R5 j4 |$ J' X) V% T3 O$ pm2 stop all # 停止所有的应用程序 V$ q2 o, Y$ O5 u8 m5 g
) ^/ q+ Y( R2 C' P- W. d0 t$ T
( Y" T9 X1 l3 [6 o8 R/ D
3 l! a9 b3 r6 Z4 v
7 B( H: f* }3 W g, n5 U
9 O1 T S8 V( V3 p+ a, A6 p5 \+ d. b
- i3 W c, s" I ]$ pm2 stop 0 # 停止 id 为 0 的指定应用程序* z8 F$ F4 L5 a. G; P: E# S" o1 w
' F+ s/ F( @' ^, X9 c o0 E0 I4 e8 Y& }3 }0 a4 G
6 }6 {4 [/ o) }! S& T" w7 Y
' U7 X" A0 M, ^
5 j+ Q; _1 |6 K! F5 {: }; E
3 F$ J/ U8 t3 G- V
: ?$ F: a) ?$ Q- Y. h% P! i$ c, z5 V$ pm2 restart all # 重启所有应用
2 D8 V0 V/ I \
1 b) s% _* E8 M& W, Z9 m3 |0 K
& l4 Z, d) S" w- R. _ n. w6 p! F1 j5 K3 H& }0 [- j
+ |1 O$ c' e3 U$ f g9 g
3 h4 X/ z4 Q7 @: g6 K/ ?- ?
( ?% i5 [. B6 e M- b& U6 `8 T
J. Y' @' B2 i2 v0 D8 N1 x+ u$ pm2 reload all # 重启 cluster mode 下的所有应用/ L% B7 A8 j% v
* Y1 G/ \' `' o- r! _
, r2 x, `. y# u# z0 i) P; Y3 e' s: t3 p1 U1 ^! l4 q
/ z- Z4 e: U+ h' G1 Y* h+ Y3 }. n' l8 Q! m4 z+ x! M5 |* c
7 ]) o- E6 d5 [4 z% o; T
1 P- x$ _- E$ p! o
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode/ I* C# w9 U# ^' ]
: f& x C4 G( f/ v" Z: o' E9 n
& Y) I& J" @) v" w# [7 b& R4 b+ E" m- ]6 E( F
8 C& ]4 m! z1 i% e& P0 E$ h' l8 A
1 Y6 I8 H L# d* k& g
8 [, E0 C1 M7 M( t# b0 F
$ pm2 delete all # 关闭并删除所有应用
0 E# ?1 q: m! I1 G, P
- a& A6 [+ W( p9 O c$ U: H' R2 ?
, o v! d1 S- [5 Y% F, g
, W3 N, Y- k- ?4 E, `
2 b2 }1 I& W7 s" x7 \. p
3 W3 B) |; k Q. }" ?; t; Z( |! c
' y0 T9 C9 |) y& R
$ pm2 delete 0 # 删除指定应用 id 0$ l- S2 Z6 i; ^/ D3 l9 f. O2 t
# W/ K3 ]0 E6 s% S
+ @ } ]. M, C$ c" V$ l/ z0 _% f/ P! G" Q( r7 [
, N, }; A1 V/ o' R9 h, E! t
0 Z! `/ _" d/ n5 @% x' T z
1 `6 J, |& t7 g! v3 l6 D8 p5 d2 J$ m% v+ f; Q( w( x
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例# y& R |) i' F9 E! y- X7 L) D
$ z. ]/ [% }, M, d/ l1 A, s1 Z! a4 B5 n; U5 F
; M* w7 p3 V# q1 q) @1 J$ N; f6 ~1 Q4 k5 a! D) v; T l8 u
6 K# f7 s' ?2 N& O
/ B4 h) H* |9 r0 u! y
3 F5 E- a) m6 _4 V$ pm2 reset [app-name] # 重置重启数量1 h! n; \* V. @' A4 z/ w
" P7 ^+ b: v1 u9 A
) f5 ] m0 Y1 F* v* K' u, T& n' g5 T$ I) f
( V7 S2 T% J! }+ g2 X9 N; P
8 m* a" `9 g8 d+ g/ C: `$ a: V# ]
) N g+ W1 v0 A+ g2 l
6 {" S/ l# D8 i. q l$ pm2 startup # 创建开机自启动命令8 M2 ]4 a( b1 O/ _
' V$ d7 ?0 ?( R# A/ }5 C
' y+ j% Z9 ^2 f( P
+ W4 U% k7 k7 b3 V7 n! E3 m' H$ w; W0 Q. D0 v
; _& r5 o& j% p8 @& Z
! C5 c {: q, z8 h7 @/ G
( f0 V1 \' B" i; S$ pm2 save # 保存当前应用列表
" E$ c& x: t& h* h
+ o( n. [4 z7 T9 ~& h$ k! {6 Z0 e- B V
4 D1 j1 E" t# L- s- r, W% h3 n$ [
' S! h X% n' m3 ^, M
/ `7 S. i3 M# }; ~4 J# z$ E. B
+ U: G/ T8 ~/ C$ s& I! T5 r" n; M4 @. [ I$ s9 ^
$ pm2 resurrect # 重新加载保存的应用列表
7 r5 {% J% W& K/ @
* t; C3 g' g2 `& ?* _4 W' [5 ^/ ]5 y+ d/ h2 z
; q x9 H5 {% j" `
: k0 h7 J- Q, t" r$ O) N/ w7 {' S. Q- P$ e. `7 a
+ _* ?8 G: I/ ?/ b' l7 v! x! |. L+ C8 P/ a8 x2 U9 R7 B. h
$ pm2 update # Save processes, kill PM2 and restore processes. i8 u% b4 G$ r L& H; H1 ^
" d) w- N+ X* ^% }% T- _! a2 Y# a) j8 I$ l5 ~
r2 q' L' X9 c, e3 Q: c0 K1 J- [* Y
& W4 ?. D6 [7 v& f: }0 h, i
- m* [- @4 e k9 W
8 D: y. s& d/ i9 X9 ~+ g1 C$ pm2 generate # Generate a sample json configuration file k" M' F- ?* P+ H
/ C" _0 V' n$ M( I( t
( N& P6 V3 C9 v9 S
% w* u* V2 G6 B
举例:- [. u5 e9 n) ^( G5 @5 |
阿拉德的脚本启动方法 * K5 S' ^, ]% ~0 T0 J
1 j8 l# \; b% h+ `$ y. f
' q2 _" ]0 C8 [' p4 z
w3 O1 P* V0 S |( k4 i' M P) Ycd /www/wwwroot/gmald/src* e! t7 R/ i7 L+ [7 [* w
. [& h: F3 D: S) ], G
% X! k1 V/ N/ c `( b( f7 ^
& m3 \+ [$ O5 I \0 y/ Z
/ C- l) } N# x1 z2 p
/ T' h2 l0 ^8 O" e/ t0 W5 L- P7 x
8 @2 b" {) _7 ^) W9 B2 E# s9 K' t* _/ Z7 o: t
pm2 start app.js
r" P! y" f, J8 J) _: M% Q7 A& z8 U. }& T6 a# K e- l% Z/ ?) U/ X P
D$ _8 N# P7 ?+ M6 [: k* `% m, P1 Z* ]! k% o
6 `' k" f% P! w. u K0 z8 ~5 P |
|