|
方法一:卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装!方法二:自己手动安装PM2 需要先安装npm
4 C% U" e2 J2 y4 r4 h0 T7 o& U# a: s7 s+ ?# E3 h, d9 U8 b- L* Y
, b: J) B! g: H' P: h9 q2 i; A6 e
5 \; j2 ~8 O/ M. A/ X! Uyum -y install npm
! v. y* J' C: s% r/ V* S# c9 }1 Q4 J" ^: n/ y5 g
" L5 G8 S. H; [
7 F5 ]+ N0 ~ [& F1 s; G+ E) K% [
安装pm2: c* h0 o6 \4 H$ s) H, G
8 P/ I4 o. e6 L$ H' W
9 \; r" T2 V& n' R3 {7 M6 A' P% S' [1 ~) g- r2 k# W; l/ e
npm install pm2 -g
4 N( E7 x" t, z1 }+ q! y4 m" V. q6 p: [
* f& w6 t" q6 P
1 R$ n g* ~" o3 A添加配置文件
; @ B2 b& }. b8 S
9 Z% K) g0 W h: n( ?& o! v5 o" q4 q
$ h2 h; w* _6 c7 u' ]
vim /etc/profile6 I8 e7 P) A l" \5 z- b# a- w2 x
) P) L5 H' A6 t% m7 n. y
PATH=$PATH:/usr/lib/node_modules/pm2/bin2 U( o! e1 ^' I
! p' u( r, Z msource /etc/profile
+ N+ p! f/ R) L; g; j) b3 a) [! M2 ]% G# q& M! _4 o; A1 x. a3 s
# `1 j' s7 E6 N& {% d7 m
; W2 g7 Y& Z1 W. w! `6 J测试
0 z* I% Q* Y) [) p$ r
1 p0 w& z. h) G( y0 a6 [ c
' M9 B4 q+ I: W4 e3 x, g2 w: ?% Q( I1 O( Q0 }9 M: N
pm2 -v
9 l; S3 p2 K# U( y0 t% o- \- ?. X& d0 F c/ \
/ K$ i/ {, P' U/ J
) o- m0 F; N5 a8 r$ E& S- p: l9 R查看PM2安装路径
7 x [: f2 t; G: Q# m. O) c% q# g, O! W& c" g, P9 ~
" l: i W' K! A0 c: W1 e) H' b
5 T- }, E% Q/ j5 ?; o" j0 y
find / -name "pm2"2 z9 n+ I7 b+ g7 N
7 e3 V5 L2 ?- [! [, x
% d7 G, |! |3 c; G( V( ^& O
" ~( o% R: g& o2 }# h( N, N根据自己的安装路径修改配置文件[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
% c j+ M# L/ h+ {3 T) V/ o, T/ X4 D% G& k$ h
m* b) P& t$ o" @
* {' z* c: R( l8 qnpm uninstall npm -g
~. L# H( s4 q9 i" Q+ \! }1 @( J& s3 c/ ~
* X H5 w4 w$ Q R) @* Z: E7 [7 @7 u
* v# o, L4 X% S3 {) ]; _4 o: E9 r安装依赖3 v T6 l5 x. U0 f
/ N: x- w1 S+ b8 \: q/ \ t
+ `+ z6 m; b) C& K! M z0 `3 s
) J% c& W/ H8 H/ i V
yum -y install gcc gcc-c++
. b6 f$ q( n) @( r: e8 E# i# l' v+ E9 w2 U/ w2 N, P9 v
; b+ N! O/ D; |) ]; S
0 n9 W, o, Q) j6 C4 L. @; v' [1 @下载高版本的node安装包
. y! m4 ~0 P% Z9 N% F; @" z5 X' i H! w
) `8 S* L; F+ o$ Z, }* X! G' r
) N3 f& k! H. J3 ~' Qwget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
X: L2 x3 w8 I( u% u
$ l( A- E8 j s G% p3 E
) s! \: W! z; ^. ^# l# ]/ V! L7 d& V# W/ h; i
解压到相应的目录
* T4 G9 S' u1 N3 y: ]8 d7 s0 e7 p$ l1 G. f; N' U
' `1 I) E) K6 W& g) a! c
a$ c. v4 r d7 y& ntar -xf node-v10.14.1-linux-x64.tar.gz
6 V; |5 Z/ m2 e4 z: A1 I+ s" D8 k
" @! p$ c' Z% w
2 t. ~7 {0 E% K- \) M: ?5 M
重命名
1 C3 Z/ _8 h* m8 F# q8 P3 w4 O
" t5 I( ?" x( R" x" y5 J4 f; B: j& z) e+ {, y7 H p0 ]& b
9 `3 H0 r/ ^& c7 W2 h; nmv node-v10.14.1-linux-x64 node
0 [6 B$ t5 g1 d* K" O5 R& m. Q y- _
5 o/ T# m% b; B4 ^! V( U9 k
) S) d2 N) C$ @1 h2 l
添加环境变量(根据自己的路径添加)8 F$ s5 L6 c5 I5 R+ U
, t; H% }, c" Y
, L/ q5 ]; p. K- Q
- E& H3 k( k, E% Nvim /etc/profile
/ Z( h. G% s3 v4 @
! `2 K+ n; M" ~: A3 Xexport NODE_HOME=/myinstall/npm/node- {3 R3 P. J9 P0 J. U/ P
$ b1 p) Y9 @$ z
export PATH=$NODE_HOME/bin:$PATH
; N) L5 |, D h6 e" w' R u8 j( Y0 E! G
8 V5 B9 c: E+ m8 d
! Y- g; o1 j9 T$ h( V _
重新加载环境/ Z- x1 w6 Q4 Q3 [2 j
. y l! i) k3 G, |" X5 W3 n) p$ D" @! k0 p f, M. E) z
5 h5 Z* f6 A, w
source /etc/profile. p* g* t; u5 ]3 ]7 `
9 f& b* T# P/ k, |
9 d' R& o& |& n H8 q. R7 {3 M& q! V+ p9 Y
查看相应版本[color=var(--focus-color)][url=] [/url] 安装pm2; S+ D$ `0 `4 h1 J" F7 k
/ d! ?' e9 e7 J$ k6 G* f1 F% g# e* J7 I1 h/ ~) c2 q0 @% J
+ g# w. Y: x5 F7 @+ y# G$ P+ Knpm install pm2 -g0 Q7 {# p8 u! m2 T$ I
, ~2 f! ^8 }/ `0 B3 r3 S/ f
& n3 _6 G1 S, O
' u* ]" B) _# J6 V( g1 x- B检测
( y& R" i2 Z, f8 ~1 l, s
' R- M; s4 r3 j# S$ q* h, _
; I! V: A# _2 c( K7 t
! f# z% L3 w0 q6 U" f1 j* `+ Q0 T# c9 Apm2 list4 J; y4 k. }0 N3 K
|+ J2 g% Z# J; F( n9 z) ~2 `' }# l( I' z6 K" Q
+ ^. D7 T* D+ f3 ?
[color=var(--focus-color)][url=] [/url] 常用命令
4 u" c( _9 l0 u# }, u
( ?; R2 A. k# v! H# x4 {5 U' t$ P- I2 U- S
6 ~+ h! R9 U# @2 d2 a$ pm2 start app.js # 启动app.js应用程序4 s4 i! X; [/ B( X
; s1 w4 M9 @5 K c3 o' Z0 Y( G f) w# F" c* P3 w q% F
5 }: l# n" v u+ _! }
& p) B o, [; g# f3 l- R9 e
* g" `0 Z. N) v4 }2 \& n0 \& v/ F" n& ~
: T. Y" h6 w. R2 g! h! n; P
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡& l- q% k4 Z- t/ @1 p
. \2 Q N4 c. M5 i! F! M# C. o {2 }. d: {5 o- Y
. y# }" x; e- M: R# ~: c
C# V$ L9 c1 f8 b) L. m: x5 O; r7 Q
7 h) n- J' R6 D. j. o# s
" a( a$ H9 i* y. }( L. S
$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
8 Q+ r8 m6 e( ]' x& w4 N0 T! Z2 W& P* G
! L9 g5 }4 S! i! D0 N
+ q* n3 u$ I+ f$ I. ~! `
K7 @: U; q# F2 \! V
1 `- Z0 C2 c6 \! P7 E* Y! ^
* L; s: p$ q( ?. E$ [7 Z
. E$ G. q& E6 b6 m ^
2 x1 x% u; i4 x0 n5 @$ pm2 start app.js --watch # 当文件变化时自动重启应用2 Z" H3 Q$ o5 [9 [8 }% k3 }+ a# a
; H$ K3 ^- Y' D! E' c$ w& \2 R. K# F- w7 v
5 J. c& W# e* N; t2 w8 K$ P: K
8 h2 T- q$ a s, y" h. F/ @
# b1 z0 {5 o, T6 g4 p5 g r
3 F% f9 ?$ @8 A$ pm2 start script.sh # 启动 bash 脚本; c9 w7 t1 y, l
/ n$ N& D3 u( r+ C; `, w
7 t" m; T: p+ h! F& I) A
" [0 n# {% `% Y8 ^( ~2 k. a
9 D5 \2 S, T, i, M. C W8 b, n' I& @$ z) ]* P6 N
, E& h, W/ E4 @
- C6 i/ F0 X$ {/ U# ]$ N
$ pm2 list # 列表 PM2 启动的所有的应用程序
" ]) t( w+ {0 c* n# }1 B
* L( y; @$ }. U! y- \2 O- Z {# R5 t1 k/ |1 J% P
+ f' I: N, u5 @
" J1 q, C- ~* {& U5 d4 \3 @4 |8 u% \3 Q: S
u/ Y# i( q3 {; j; ^
" S6 V6 K2 B: z" w& }$ pm2 monit # 显示每个应用程序的CPU和内存占用情况! [1 q. I X) Y$ ?' _
& R1 j5 p1 a: W
. @4 I: p8 W4 `* H
) Q, N$ c0 l6 D) M: ^; x4 [& b+ p; R' M
- Q5 t' \9 P7 O2 O) f, h' _" ^) P+ B9 f: f6 A1 ~$ C
. w) X) D& q9 D7 A$ pm2 show [app-name] # 显示应用程序的所有信息+ a! r/ B$ j1 F9 o7 B
4 S3 b: d: m& L6 G+ k/ D# b) l% z' T! i* B0 ?) N1 l
- g# B, D) @( E2 J0 i. Z0 Q- u3 {$ p0 F1 |: g$ T
, @4 E" D- e" L0 z* j- _0 K1 S, _9 s( ?- z: a9 Z
3 K. E& _" M2 B+ G( V) q1 n
$ pm2 logs # 显示所有的应用程序的日志" h* O) S; r/ Q! ~7 T1 _ ?+ T/ i
# Y) Y& o$ q* p9 f
0 P4 r" j6 @: m% ^$ t8 H& E4 h
! _" M# @ G; T
1 z& [5 F% x! {1 H, b% K. z- ]1 M. H5 ~
. \$ R9 }/ {- w+ g
& i1 k# T/ { n" L" w/ ?6 C) K! M
$ pm2 logs [app-name] # 显示指定应用程序的日志! F8 E- Y% @9 Z
0 M3 p8 d& H* Z8 ~/ y/ n6 m. }) F# q; I$ G) H. U% a) o
3 U+ c4 t; D' X2 I! t2 q
+ F5 f: i: p3 o, B$ O
! _2 W y3 M; i: H" j9 E8 L2 g
# v& M! V% | ~- s4 b- C' v# u# @
$ pm2 flush
( C0 j3 B( o7 F4 I) E1 {- o5 t1 H3 r
U. c# r0 K4 e0 ^5 b& \
9 a8 j& D; G6 X2 @9 w) T4 ~ C. w* G4 n" H2 j
8 L. Y& J$ I/ I3 C! G# o3 ~! z o7 Z ]
( E- P7 W0 W5 n" @4 D2 k$ pm2 stop all # 停止所有的应用程序
4 ?1 N4 {3 {# | s
+ q4 k) P0 ]0 X- }: w
5 y% G) {9 W; m; O7 l# |# C
" K. Q: K" Y6 J- z8 W0 d$ S9 c9 M l: U
" |/ W/ c) n7 {3 f
( n* n& |. Q) F" }5 R
5 C; I4 Y5 U; |, ?: a. }( i) K# o! i$ pm2 stop 0 # 停止 id 为 0 的指定应用程序
6 J! }1 V( \* R" |3 e, x
$ ?( ~' z$ Q: t9 H4 D& E
1 z+ @9 C& {) j8 d1 p* X, O. M( T# j- Q) @- l
8 R4 \1 z4 \$ L9 L0 a
5 _1 V5 S2 v" j* U; x7 w6 ^% K
/ N2 C' B5 G% J* W1 n8 D& g
. D8 u( k U: e' N9 I. s$ pm2 restart all # 重启所有应用
& h4 S. s5 }- ?1 |1 t; `8 L& Y" }) y W. B% f+ |; l9 [3 K
+ l+ [. i3 L, W! P
6 J! K% B' n* ~* E. ~# P& K3 K0 F4 I+ J
; |* H& {! ~ l" e1 o2 y3 y# d+ W& e
% }4 r* ~4 w0 W: k
% o% Z6 C) _* w+ s+ a; k5 ?$ pm2 reload all # 重启 cluster mode 下的所有应用
6 K7 f k5 @* E/ {
4 q5 W. u& q( f& H7 |1 l$ N8 ]2 x: U* |5 u5 Q/ A9 ^
: Q2 F" V n3 }& l5 V1 p: l8 K5 m. I/ F% x) a i# D2 G* ?2 z
" l+ | A5 C3 J& M/ S, `3 t6 y
2 t7 S" J4 z9 W! d! g8 t/ X
; }9 L- L+ B2 S" J5 w- s o$ w! @$ pm2 gracefulReload all # Graceful reload all apps in cluster mode# y% K% z/ F ?! H0 U8 e
3 A+ e5 R9 A& S4 _
' Y& {6 @5 \- E1 e1 h- V
) b* X# [/ A6 K5 B) }' W
?# m N$ p8 Q" e# { R8 J1 m9 e* J% U2 q4 E4 S& ]
2 h/ V4 w! U5 V3 [
- d) [* f3 J1 p: _$ pm2 delete all # 关闭并删除所有应用6 t6 f l3 I' b/ h! {0 Y7 ]
6 J5 g6 g7 c1 }) m& U @# r1 W
3 e4 i# w2 [! Z/ h
+ {7 n' b" z D& M, D! I+ K4 s' x8 }
) c: p6 k" S: m6 |) {3 } {% z: i4 M" D
: f! s1 C( \2 a/ z! H
$ pm2 delete 0 # 删除指定应用 id 00 U' P k3 a- U) p
& I9 O, m- ]7 o5 Z
# @4 s# T9 `9 N0 g: D9 O& _9 ^$ I5 [6 n$ o3 p2 J
# n5 f1 l, |+ O1 `) `1 [
) U7 I; q* k9 M4 H! h2 K) G& x$ U( W, {7 I- h% p
% h8 J7 R" c" N$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例! k% X' B6 A2 P9 f0 k
1 [5 u0 J. R: C& `% U' x! X
7 w w3 F& ?0 ]' w/ j( D$ |3 H8 h m( |/ `
O* A; k' _ t- ~" p
% T: j$ \. X* p0 Z! b) o9 F
7 z4 m. O; W# q3 Y9 c! \/ u: v) B# R& q) ~
$ pm2 reset [app-name] # 重置重启数量
9 G; s2 k. r5 P- R5 w% J
, y/ j" g. }4 f' K7 ?* _/ i; D: a# @7 M3 t, L
7 D0 `/ I& f2 |4 c1 V
f- o Q0 P. l. c) `% A
3 l7 n) V9 v' e8 [( w7 n
" e& o# h/ O4 I$ ?0 F" E* D2 k3 P+ O& o
$ pm2 startup # 创建开机自启动命令
1 T5 d! [; w# F$ I% \8 m5 t! M3 I
! E! b/ \! Y V. K9 f" m
( H% f$ I: i$ V: j! \. ^( f( g/ N( M. _/ p V$ r0 V
* I# P/ b) u% M5 H6 n
m$ u& ^, o! ?" k3 k% L3 q/ M5 r
3 Y2 _' T: G) M; @7 E" t6 h: ` u' G+ @# ~ B9 U
$ pm2 save # 保存当前应用列表2 c7 o# v4 ?4 [5 X/ c
- p) V( ^3 u) Q% }3 G$ e
/ i3 D; o2 m1 A! H l5 j" N# j
' @9 x7 K7 S0 p4 m) D2 B* |/ a _5 C! \3 M* I
0 h2 R8 R7 |- Q! p7 k( l1 @2 O
( w5 J r8 Y9 s0 R/ M2 B/ U x4 X" U/ h L
$ pm2 resurrect # 重新加载保存的应用列表
. K: n: u! Y N8 d+ \6 l" |) t5 x, o! Q7 @2 {$ R
; i: t9 l, U3 B( n4 [8 C5 e0 k! P! ]& [$ r( }: M- O
, k+ _! o& Z4 M. [6 b
L& b: b0 `# d' N0 C
9 W* S6 K4 |7 b6 y3 `+ A% k! c0 X6 l, C( n5 y G6 u1 O
$ pm2 update # Save processes, kill PM2 and restore processes* w6 Q8 w9 ~0 l
2 N* j; U! E. g) _- v5 ]- g
- W1 |- U( j9 t$ C. H& t
- n. K+ H, f5 [: z. D1 j2 E1 Z9 u& f+ [! y
/ g9 s- O4 P3 a5 ^" x1 N
$ _7 @3 W! K9 ~
0 Q$ J2 `/ m! M+ p/ S- b$ pm2 generate # Generate a sample json configuration file
& H- G- Z5 G# q$ @: O9 l
. W: S' k4 ]: l9 h1 m
, f# A6 b7 x) x% ]8 @# t1 i8 [- J0 v; e5 B5 n+ j
举例:/ ]: Q" I2 S1 r: D& j, m
阿拉德的脚本启动方法
8 h' i6 J7 s" ^8 Q; F" y$ o9 p. {1 Z+ i& ^
0 d& o) @& a" A4 b1 M
& x4 G9 g1 D5 l, H4 v- n' R! jcd /www/wwwroot/gmald/src6 }, ?9 @# l% I+ Y8 s( a1 x% t
% t \" Z. K' [6 f% y1 A9 f, K1 u
$ ?# {3 F2 k `& j9 A
4 J( ]: \) f3 k& Y V8 N3 e, q5 O0 g5 I" f+ P" H. T+ z; o
' J& x \, o- ^3 Q; e Z; S0 {
4 f6 M3 A9 o4 _1 h/ ]- C- V4 L: @8 x: M1 G
pm2 start app.js
& p3 \5 ]& M9 M6 N& U7 s: b0 f7 b: G0 ~/ b! f% ~
4 p0 Y L: e/ H
" F8 i2 i& H4 a% q: `& ?
" l1 [$ t* l$ B: I! V8 k$ {1 N |
|