|
方法一:卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装!方法二:自己手动安装PM2 需要先安装npm P; G% M2 Z4 ?: R
) p p, ^. U# {2 ?" [, {; X8 i9 G: b8 T: c1 G
* E+ A& x" K( S+ [; A
yum -y install npm( q/ [2 e. V# k* B
- V" t7 n+ }8 y) R. q! }: g, O1 r% Z8 Y6 T( x! A, Q
5 z; R9 T2 J0 R安装pm2# S% h2 O9 p0 a6 s7 ]) l
! k* H, j3 U3 L/ ^# a, x
" y3 w7 O! k u& w! }$ e
% G/ N( p2 M/ I2 p3 `1 A V, v8 dnpm install pm2 -g: o9 W% j7 M i1 l+ @: l0 w$ k
" f( @6 z# V0 d- {3 |
6 [+ [: [: k1 d ^
S$ E1 t; W' B# I( V8 L3 u添加配置文件
# P4 p& B1 u& I9 y4 O
! d1 P; s) ^+ ~. U2 M5 u) N; ] A3 v0 O
; D: n8 _$ q; Q: {& o& S0 f
vim /etc/profile
s% Q9 G8 W" o' P" {- T1 _8 o) q) |, j0 ~! {' M2 E" v; t1 S; I8 x
PATH=$PATH:/usr/lib/node_modules/pm2/bin
+ [$ W& s6 ?" g; W. _' ?9 K& v* y3 X8 ^/ ~' X% P+ G7 q
source /etc/profile, l) B- y& Z# M2 P' Q' a$ q& ]) R+ ^
2 |; o7 u K0 M7 M. ^( g1 i, i
6 O5 k! O. l& s8 C% `1 {
* z4 ]! R; i. U8 a6 k# G. @9 N/ n测试 H& o4 \. l7 h5 R! t7 C3 x, x
R- j, T+ U% R) V7 S: D
# X5 a& O9 A, W! k0 e) U( f
) w& l* M( i! L, a6 P2 _pm2 -v! S; p! Y9 x0 G e9 n
* E( M k2 m: U
8 g5 W+ q- v7 u f
7 l# ^0 F' F( P! s/ k, x) ^: R
查看PM2安装路径
% R" |$ o4 C5 H& O7 H+ ?. h6 u7 Z! l& T; w+ s
3 V7 k3 _; w/ L( n0 C. z( N1 ]2 |- J& u5 c
find / -name "pm2"
1 X9 ~/ ^ T6 i& D' C0 w, ^( F% W, C2 w/ J& G& W: @( B- o4 q
+ k' Z: I' P ~
) i& _) \* J t9 Q根据自己的安装路径修改配置文件[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 w+ U0 z- Z' S2 ^
+ O( B! Q3 s) G) x& h9 @
r, J- y% w0 {
0 x* U9 W7 U- {. b+ D8 V; B: A5 E- znpm uninstall npm -g
; R9 j$ F. l; z+ J$ w8 U2 N' N7 s4 g8 h7 V) t( v3 w8 k
1 U% W: G% V7 ]' B# C8 ^( T: r5 |1 S4 L( ^! m
安装依赖
0 }% _5 c+ a6 R0 M3 ^1 _" k @" @
, o, [( }* K* }8 Y$ j
7 b9 A8 o# [. V% ?, Q6 k; D; ]
yum -y install gcc gcc-c++
8 p6 j; N. u; u7 ]8 c3 a) o
$ w/ [4 J, T, ?) s3 x3 K. _& S7 _' n
: W6 |0 n- P) O; n1 d0 r
下载高版本的node安装包
: M4 y; i1 g/ l3 @. p, O/ q" X6 S1 Q1 h h# h) P( P9 r. v( n$ e: c& ?
0 S q7 ?) a, v0 p1 ^
! I# R" v! o1 |4 W
wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
$ T8 {, Y: i$ @7 C% F6 Q J8 T
7 [+ W% E& H6 c( x3 l) E
; z4 [! H+ w* n A. e! c! N+ n/ {2 r8 t0 t
解压到相应的目录' q! J% R R/ \9 I, z/ p0 }0 ?3 c$ _
( R1 |/ g: F9 r8 S
/ e. M9 ^8 ]$ k/ ?6 }2 U+ C
) N+ F5 M+ U7 H7 g0 ?+ u( q' ztar -xf node-v10.14.1-linux-x64.tar.gz
# k W7 f2 ^) i1 M5 Z* j- N1 p* I" Y6 V( S4 e/ _+ R& g
. u7 L% C/ y5 r, V6 C1 x% F* l1 u, o: g L2 G" O3 a2 G
重命名& ~' w* J8 j1 {, r& L% M6 k# [
1 S6 l0 ]5 x( o6 G& r
4 G* z8 B" S. P M
: i8 m5 ]% D# d3 A3 |! qmv node-v10.14.1-linux-x64 node
2 b5 N4 k; y8 F' E- N* `& O2 P' R9 p9 p! b. q8 q$ w7 B
& o% i) K9 J; |# }, b/ p6 V, r. a: U: y7 @2 w S: e
添加环境变量(根据自己的路径添加)
* F4 p9 M$ |; ^! C# V8 X. C+ U- P# I1 q" L. L, g/ `
9 V4 I% q2 D# O4 c) ^
6 B2 n1 p: [' ~. K: I
vim /etc/profile+ Z- D0 _# T' x' _, f
+ V- N. Y- w, {7 q1 d" T6 e* [2 j
export NODE_HOME=/myinstall/npm/node$ }5 R& l! S E2 X7 |* t0 G
6 Z( D w. G, h$ Q
export PATH=$NODE_HOME/bin:$PATH! m5 x7 @0 E: q) N1 Y
1 ~3 r' w9 d3 [2 f
) N, C; J% n8 w# K$ X( ~
4 h2 N/ ^( E/ W1 c, r, m2 y5 v& y
重新加载环境
6 i$ {$ o+ V1 S3 z
8 | D) y9 |. s7 Y8 j7 a4 ^! j/ U: j" a/ E6 Y R7 H
5 V. D8 u8 C/ g3 Csource /etc/profile7 t! z4 S2 Q! \2 @! R2 L
B `: t8 A% T' K* E& V
7 A- m# X- P8 @; ?. J7 |
; {* _3 I/ m' M查看相应版本[color=var(--focus-color)][url=] [/url] 安装pm2
6 N0 M( S9 Q6 ]0 c+ K% A" J$ Y; D. d/ _2 N
) ?( j; U3 z/ G5 ] D
8 Y: n9 K y3 O/ l( X4 Q+ onpm install pm2 -g2 s3 y2 A3 }& S: e. ^, d
/ Q* F' f& \ Q- t6 e& b
! q; `1 t- G7 D
# Z7 X7 V# o! r
检测* i. H9 F4 s& [& r" M
* l6 D( M2 t) U$ v2 s
9 @2 ]+ @, w. r% m; h! v& B* y' [2 {% T$ m
pm2 list
) }! c5 J7 Z6 F3 d+ R0 p8 n
* E" a. A7 M8 [; ]) E- `0 Z5 j& @ ^- @
& K# J+ ~0 q1 Y0 v( L2 u$ C4 V( w
[color=var(--focus-color)][url=] [/url] 常用命令
0 f. r& _! G' i! j* n) D
. v0 @2 P7 j S% ?! @
. g( W1 w" t" e( t1 ~, ^. ^
6 N$ ^+ w( \! \. `1 n$ pm2 start app.js # 启动app.js应用程序
" ^) i( j$ j# y8 W5 z0 M7 x
+ K' Z8 Q2 _6 A4 R9 d" R/ @- y
6 W" P, C2 ^5 B7 o
3 f1 a; ^2 F8 v/ @6 V5 q2 b5 D8 s/ z4 G# R7 C( B
# X+ P/ R( D) @3 a$ t+ t* y
. d+ A- a- I$ Z5 X
' l8 U' c O; K! ]$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡
! `0 @/ P: Y+ t5 T) s! x7 J- k U( n( X3 j9 R$ U
9 Y7 d# T$ K/ Z- M
+ A3 Q% n4 ]4 A1 U" f, I
2 a/ ~: Z3 b$ [7 v
6 E: M: K* `8 i4 j0 X6 M) ~! W. W2 i. L
( u3 b( Z( ?+ \5 A
$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"# f# L) }' S! C9 O8 B: ?$ R# E
+ b' G! v% z- }0 v4 E( _1 ~! t9 I/ n2 H0 U* S
0 E5 T& |# [& z" } O: o
0 l5 k7 x0 k5 Z
v6 V# |' ^' P+ S4 M
& _& k1 @8 o. O. [+ N% S# M
- w8 B& Y9 @# V' X; C" W
$ pm2 start app.js --watch # 当文件变化时自动重启应用
8 n; t. }5 t/ o& ?4 S4 C* u" {+ ~9 o6 w: U9 j9 t% S4 ^% G
2 d b9 n1 a1 s, Y& y, o, K3 [& R: _$ S! D$ u# b$ q# P$ e' |
/ ]* e4 q5 E8 b* O8 s% y9 E# \+ \0 p1 x3 P5 `
0 [& i# s+ q" F4 `, Y
$ q, x K2 c0 n" h3 b$ }$ pm2 start script.sh # 启动 bash 脚本* s, i0 g% S8 \
( n6 \) l6 W% @. i
; W6 _8 X9 Z7 m9 ^- f0 b
! K* m. J" Q w* v; i. z5 _; [
% X: f2 t% `7 }
# W8 x8 o* t. ?4 h2 }/ o( J" e
^3 M* R# O* ^$ ]5 j m5 m" \; q* w7 a/ O0 `7 x
$ pm2 list # 列表 PM2 启动的所有的应用程序" n5 `0 t& h# t# E& r! j
; d3 o' K( q7 Q- u4 f$ g% \, Q
- l8 F, g- B4 D7 p# o
! X, P: |% Y; D2 F2 c; d' T3 _" x F0 w3 o8 j$ x$ @6 G- ]
# p8 b( M' m" t9 b# {
; {8 j; o% J, ^% g2 o) a
7 N0 Q" `. w4 u; C) Q. ?' T! N
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
# K5 H' s9 K9 z; y! n) e2 c. s- A4 K4 J9 ^; h O# m- l. n
3 |! d7 `: C2 J3 i- V! C. Q2 ?5 _& f! E! M: f$ _9 ]
% w4 {9 [% R }: K! j
. p4 d% s: n+ L U% B
[5 V" a6 ?! f# ^$ Y. b) L M" H& D% k( c% }9 K% S7 `1 f/ }
$ pm2 show [app-name] # 显示应用程序的所有信息3 m+ Y. n. I( m/ a( z
6 X: ]" V: z9 d5 I" ?, l% e
' B6 @! z( n2 E# | R
4 j1 I' ?1 ^& M" C0 Z
# T3 ]7 E3 E( v. R, J& h1 n
/ _5 p1 @) o$ h: v1 n
/ I4 b) k. e5 k
- D5 |* ^0 ?) `$ n0 s
$ pm2 logs # 显示所有的应用程序的日志
6 r6 q4 W( R; _
) k0 T6 P$ c5 o4 m3 j% [3 v
3 r I% ` J/ U$ l
0 B, {$ H$ d8 {$ O9 T& v9 ~8 F
|1 A. i$ |# ^$ U+ y+ N
1 ]* F+ s* q6 e: t% |
X) ?8 c0 `6 c9 L- F7 R
* d, i% Z2 r- \6 n$ pm2 logs [app-name] # 显示指定应用程序的日志
; K' S* B! g& P5 M+ r
$ X! K/ Z; [$ X% C/ e( t$ V) r e$ I1 f
. r+ y) L3 X( G, y+ B R, V
# t, `8 Z9 s. {3 R T
6 E2 I3 [: a2 k2 k5 X8 N; b
9 q0 f4 D2 u0 b
' f1 ?/ E ?9 }# x i/ i7 s$ pm2 flush
S6 m5 ~! C: {( M- c3 I* i2 t/ s5 c
: ^8 B" Z- b2 o3 {/ D0 B% w
! ]' C2 F! A: t
2 i% q6 a7 m9 a5 T( j% V# G/ c+ q: z: F. I, e' ?" l' r$ F
0 h. d# N! x* }/ O& J" k" {6 [* D1 b% q- J0 {3 G% _# @& o
$ pm2 stop all # 停止所有的应用程序
) Z! m+ ~0 c' J" L! i; G8 p9 e4 @3 k3 {( G7 {0 P
5 w9 C3 h- |+ ~3 w; e( ^
+ D% H/ L- z! y7 U" S9 m" _. |
2 r. ]) }2 b8 y; Y$ O3 H
" X7 V9 r9 h5 r2 Q) |' u
" B) m0 g1 z" G, L/ i, m5 Q' @) @ Y# `) I
$ pm2 stop 0 # 停止 id 为 0 的指定应用程序( l0 T! m4 d! K& a$ ]8 ?+ J
) j$ d& ?; ^" `! P3 V6 y. k8 H. }' G; y$ K3 K
9 Z; a; U2 w1 E
) q* P! N( c3 F2 e* M5 _# L" v1 {2 ?* e9 x/ L" V
# @4 v8 N! C6 J* ]4 T
$ J# |( q6 K' X$ L; T0 t
$ pm2 restart all # 重启所有应用
3 v& u6 S* }3 ~$ V! c
7 ^1 G8 Y3 f9 N/ [2 _" w! K
/ P8 E5 A; G: K: T0 X0 s" A# Y! l7 u1 o' J: t3 Y. `( W
/ H$ ^! l; m: V! _ b
. p+ w' F) F6 ^4 X5 ]& ]7 x7 D7 G" I: c& Q, G: I( q) R% L
; |$ [8 |) F# D! m# v. X$ n* `
$ pm2 reload all # 重启 cluster mode 下的所有应用
7 @6 X# o! T* }; k5 r4 L7 ~2 O
X( W6 H# {' \8 w& E6 ] `
; S$ K4 C+ k1 d: b
2 u$ v3 n, E6 y6 Y: D' M8 i4 {
" v2 q+ P* m( l6 a) ^' s3 E
6 P# c6 E& x4 m, u' ~9 n
" o- M( \9 Y6 l) [1 e$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
# q8 |8 `5 J" k+ u) R6 n6 I2 l+ P
2 C0 }0 f' h+ C( @+ @' a( l6 \. Q, Y+ e
3 l# K4 c3 P% Q0 n! D
( q+ `* [6 E" _- v
2 f+ H! @* V9 E+ Q6 j, y, x4 o9 C5 Z+ ?" W
6 e1 R/ K# M% A5 ]& o$ \( s% v2 \. g6 j
$ pm2 delete all # 关闭并删除所有应用0 H# A' j$ f. N/ a5 E: U
* P; H0 _& R/ Y$ y$ l! D& M B% A! N P+ W3 z
. ~( n0 y4 `% E9 Y* O! ~. y
7 e' K" w4 a; F5 y! F& _
6 e9 U0 t! v# U w- C
- A! r% [& b# b/ P# G
* W4 p* U U/ G `+ g$ pm2 delete 0 # 删除指定应用 id 0
1 D5 A7 h- t7 t% J/ k! }! Q& e
* s; \0 ]) f% t3 R; }5 {+ m
" z/ {$ Y2 v! ~ T, T4 ^" S
8 b" V$ ^! b+ X0 r: X: s
2 l3 Y! w2 ^! D$ i# W1 l& v& t# p
8 s, j p2 o0 E: d: I' E$ k& R, O0 r" D% h; m& y% v4 L D
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例: X: L6 j) T! [9 J" Y7 s/ J" M
@" R/ Z8 h9 N
4 H ^0 \0 _% r; i
% I! U2 X& l* ^) H' G; \. D* g* E/ i( ?2 J3 f- K
* V( @5 r d2 ^+ T8 p" B1 t X" g ^& j8 F5 `; w% A- }
) |& r! W. ~& ~: Y7 D9 Q. b6 Y( f
$ pm2 reset [app-name] # 重置重启数量
; N2 Y. {1 ^! {+ y3 J/ U
' q' p H9 E. ~
* |" }, |- a; y! T2 J3 k+ T
/ D. U+ u, O, i3 F9 K( _6 t! c/ W/ T; c' `
, p% }. v3 ]* i# V* h# H
6 D; U9 s- Q- c- w. h
, r6 |+ ? [5 `( Q5 W, u( I% R! b$ pm2 startup # 创建开机自启动命令
9 m+ k: C1 ]! J+ s% b9 o7 D, f, d* M
% y' d s* }8 A$ L. G
1 g3 u4 E7 }. [! U+ ?0 K2 @' g6 }( `
: L5 a9 B$ X( Y f5 M3 Y
" K9 C8 q/ Z8 z, O5 E
1 r8 l$ C1 s$ r) o- [( y" c! \/ d$ pm2 save # 保存当前应用列表
" Y& Z7 P% k/ r; d6 O6 v% a6 r% ]1 l; N. G8 s' S7 ^" Z
7 v% y0 p) n P( M! r: N& m2 k# V% I6 k# n# {9 c$ \
7 k/ }- ]) b s9 ^
* _; d0 U6 F+ ^5 K/ ?: o5 F) _+ ] ~4 h! B# U0 v9 F
0 X6 s$ r7 P) Q4 `. v% R$ pm2 resurrect # 重新加载保存的应用列表2 t' M2 C- V* v$ \$ U* Y
# u* O+ ?/ m8 t- j6 n) P/ j4 I! l( A! H# _4 s$ ]3 X3 [
% Y- D- V" I4 f. L/ J6 w6 B8 p; j* x' q, \3 b d) W
( f' G3 U- g4 N9 \
' @8 Y& R0 e3 y* {! k ?# p
5 S' f L, R& _; C7 F- P4 a$ pm2 update # Save processes, kill PM2 and restore processes3 M& T1 k+ S5 M
* o$ U1 G( Q) w* n& T( }* x5 _6 Q3 \# b) E) O7 F- B+ ^5 u: [
' W8 j* J( {! k' @7 j4 _# d
' _2 X* `) ]. E$ @+ w! S* s
$ n, V2 k# O# N% J {
4 N( t8 t0 J% C; g
0 c8 I2 u3 P1 \3 e) t$ pm2 generate # Generate a sample json configuration file
8 q$ Z" C& X# u9 a: L# l, Y5 u& _5 z
: x+ F9 O5 L1 N& |
3 `( R6 L5 T3 g6 }+ C9 f举例:$ J# W3 X1 D" a, Y, C
阿拉德的脚本启动方法
8 y" M6 ]( A3 v+ X
3 e$ I* d, m. _
9 F( f) D. C; L3 _8 `4 ~& W2 r2 l1 }, S, f: q1 M {7 h
cd /www/wwwroot/gmald/src: Y; ~, i( t S6 s9 @
5 {5 I/ w$ `. h" `
/ X' J6 H8 Z% F# D& t5 P1 q- |
1 n; x2 t" ?4 c% x4 ?& @- o' ~6 M1 i1 I/ J6 A- h- r# }" \9 ~
) p/ {+ u4 J$ j( P2 Y
7 K4 {! N! ?* j* f
9 \/ |+ Q# \0 f8 f% Y" ^pm2 start app.js8 T* {/ l& n* m+ I+ d5 P* o
7 c4 T' o; N# z0 j) L- i% @9 _
- D& L3 D5 C' o0 d6 F, I- `/ i8 U
; f9 K3 q( _( v L) S( X
5 R- H+ R" z$ i3 p3 ?7 c5 j |
|