- 打卡等级:暂无等级
- 打卡总天数:316
- 打卡月天数:26
- 打卡总奖励:255
- 最近打卡:2026-04-26 00:39:47
|
方法一:卸载宝塔安装的PM2管理器,尝试重新安装5.2版本、多试几次,或者重启服务器或宝塔再次进行安装!方法二:自己手动安装PM2 需要先安装npm; Y1 q2 B. V6 ^4 m1 P6 Z: l9 X
6 `; M! T; \% q, f
B( p8 C# ~3 V$ l/ f$ F& D% n' K' M1 b
yum -y install npm% w' n$ r# m6 ?; Z7 v$ g/ G/ R: o( F
9 h2 ]2 S0 B4 g# Y. v+ T, W) }4 ^2 a, q1 \9 N2 ~
5 T6 y4 P6 g5 w* [; k
安装pm2' C2 Q4 u' n$ u" @* ? \
2 B+ d9 O! _# h) s5 T
6 b/ x, a0 s# H- {/ k6 V1 B$ I6 g1 X
npm install pm2 -g) b/ s! X% R/ @0 v1 t
; P: E. D0 e' E% `: A0 m
( T W! |6 G0 `% i+ z# A
8 l* G8 J6 G, f( }; Y6 s8 r
添加配置文件2 Q( Y# d/ R7 s0 u' c
2 o; G( N/ b6 S3 O
; b; I/ G& I0 c$ Q
$ w& _1 N9 z6 e7 Q9 k4 hvim /etc/profile+ O9 p7 k- M% r: u4 c
) {9 h* y; n9 \6 m9 h
PATH=$PATH:/usr/lib/node_modules/pm2/bin" A/ M. n/ k( v2 r* {
; u3 c& N% i, Y9 nsource /etc/profile' O3 V9 P$ q% p4 ^# h+ m
! }1 q6 s+ ^% v# o$ m# g8 N/ d
1 X) c# J" k- u4 u
: S/ S r: I! m& d测试
/ m& j. R1 Z8 u# V8 k% V
M% h- `; f; y& p0 D" T0 e! l& H" f# `& U
& p' e; N# @/ H( a1 F" [* [pm2 -v
z6 K4 I0 Q8 u+ o- c/ q, R8 k) E/ u
8 j, T+ U/ x8 ]& l
. ]) ?5 Z5 {+ p' c f3 _# S. ?; b8 }查看PM2安装路径
4 _9 y2 S$ |' Y! U
0 E( {2 s& ^2 @# ~9 w+ @" e0 h' L" Y: V% v5 p8 ^
5 Z( }% x4 E+ a3 R# ^% r; J6 T
find / -name "pm2"
C2 `$ s( n7 u: R
% C9 D q/ _& \2 z$ L
! ]+ U: s$ O8 q* ~0 P: P5 L5 _8 }9 L% }; c* v
根据自己的安装路径修改配置文件[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
4 V! l0 M: C9 H) K. Y0 P- y
! V1 W" a% F# _) o( g5 C4 t$ h8 u3 J- x+ \8 C) U
. R: f% J6 v$ `; J
npm uninstall npm -g' G2 a& Z; q9 P0 C& z: o- h* o8 P9 h
6 h7 d2 H8 ]: e: w
/ E. e; w2 u) ~6 B" Z" @. G
, V6 b" q# ^) b3 O
安装依赖6 D, e- R& o7 @2 R: N9 t
6 L3 A1 y L$ E1 x) S
% }3 D" i* k( T8 x4 w1 \- m) U
yum -y install gcc gcc-c++7 {# e! n9 }- _% `6 H& B
- {$ h! }- T, b) a3 Z/ r5 t; i
( N5 c9 G. o/ I: g1 g- ?3 ^
: G- k7 Z: }+ M+ R1 J0 j, i4 z: ^下载高版本的node安装包
) p2 _5 o8 Q0 H- U2 W+ @& Y9 [* V$ Y ^' A8 m
* x3 E1 |1 K/ F5 f
/ w, M/ L" T; _. y
wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
$ u" _+ @- B/ Z) y9 O; p' [6 j- N: m1 V; j
: E: {2 j1 c1 h) E) W* Y
1 S; S( s& y+ d5 X+ K解压到相应的目录
) p: x) ?% e9 ^
3 G& N$ Z) V: e) J, q8 |5 A& D) n- o" s, P+ K
' q9 r' Z4 d6 I$ e) ~, N0 }# U
tar -xf node-v10.14.1-linux-x64.tar.gz
& ]* O' H1 t4 ^& e+ O' U# z7 V- c9 L
$ C1 B1 [ r; [" ~
! j6 P9 Z6 ~5 D' v重命名/ ^) Y/ ]# E( C' O: ?* h
9 T" E1 L. ~. L# G
3 s. }0 n9 f" y$ u- D: z) H @/ y' r4 e" d- b% n2 E
mv node-v10.14.1-linux-x64 node
' \$ M& J: U- s% v) Q" U) q' G5 x; D6 n* c' P6 J7 f4 w4 [+ N
. M& y$ Q* P2 \" `& Y
! q8 s' Y; @" O9 |/ t添加环境变量(根据自己的路径添加)
2 m7 L* c! L( s# ?
9 b- \1 V4 G9 w$ M' J
/ t) A4 {8 L# n/ {* x" i2 P* p9 t* i8 L1 A3 {6 h, {
vim /etc/profile) s! \- b% o4 X1 u3 c' ?0 F
* w: f8 y8 V; Z+ l+ yexport NODE_HOME=/myinstall/npm/node& ]+ Q5 c6 i0 F. |+ J s+ N1 z* ?
3 }0 i6 {0 ^2 F3 I
export PATH=$NODE_HOME/bin:$PATH
3 o# `3 g2 v; N$ ~) j, \0 O
* c8 ]8 I/ F# @4 `+ S9 Z# N5 |( V9 o: T2 A' ]' }
5 P L! s1 u7 C( Z7 W# _# d- l重新加载环境$ O; b; n2 Z& ]
' u9 I) E* `; K0 w
: @/ H3 S) G- U0 g P6 T% W( p" g J( w# N
source /etc/profile
1 q% B' F. x/ f
3 H6 c" w$ `) P+ N& t; {$ } p( N6 V! w& ~! N; G' }4 R4 C
: z& }, z& s$ k查看相应版本[color=var(--focus-color)][url=] [/url] 安装pm2
3 L, i. z$ B0 i/ ?: ^" E( \" l% v$ \& a
* z0 A' P* p5 Q/ K4 h0 u
- u8 x+ q* j9 j4 R- Dnpm install pm2 -g
0 w# ^* ]% `% c" q$ n& G# ^, k+ o1 }- f3 j! f
1 O& V) r# N( @+ A' ^7 ~3 I+ a9 g+ x9 L" u( k
检测$ Y& e" P$ \ G; ]
1 t9 b0 N) e; j
6 \! [; i) o7 k5 ?7 [" w
2 | g0 D0 D8 O& [1 ~
pm2 list$ @3 r! x9 E# _: u# N. b9 J0 |
& O6 b( K/ z r& r. U6 H
- g' ?" `$ Y" @) x! [$ G+ I; U& u' A! e* ]& l# i
[color=var(--focus-color)][url=] [/url] 常用命令9 W1 S" Y$ b) j
, A& n4 H. s f$ f. j9 r# n; ^3 l- }% t
0 A' @% s- C- W- b, T
$ pm2 start app.js # 启动app.js应用程序8 ~( F M9 V+ S2 Z
2 W P4 E% {9 [- O+ a; [0 A! Q6 s B
! g9 m5 Y: H, k* @% o# t3 h
6 @1 N. A/ M3 I- c( [- w2 y5 |
( P$ |9 g" b* B* i3 [
% Q; ~3 A3 O# [5 j2 y
$ [. J# h8 w' ^( @/ A$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例 # 4个应用程序会自动进行负载均衡
6 U& v; T2 ^4 y% t( \
# l/ K6 y" N! I) `
0 X0 G* R) G6 }. N- o/ t
4 E7 {3 E2 L& x+ Y8 I: _
N0 A7 T2 f3 d: M) w( |- ]
5 k9 O4 W4 K4 _0 n+ W. f2 S9 a! e0 z
8 G4 ]- s* w! m( z& x$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"( V( N7 ?: w+ o& X( |
" v2 L# ], t/ O
3 a4 V5 E: }9 Z8 p
F/ G |2 B* L$ t" V
1 r5 A4 q, \7 W# x; H* E7 X
6 V+ X) p; i0 l8 k- K! i, Y; b* F4 a) N
. z. W6 u7 E" ]1 g$ pm2 start app.js --watch # 当文件变化时自动重启应用
8 T, A* J1 e2 L- F: h
# @9 H1 U1 ?/ ~3 \. k5 s7 Z0 {; d+ E% \5 n. V1 y
3 n: A7 h. h0 D. ?* z @$ ]$ R" n1 o4 V, X/ T3 U2 {" S, f# }
; |: I7 u7 ]0 _2 `( l: y
: B$ h8 G+ M3 u2 V9 q
* K" ^ H$ O1 ~* q7 [$ pm2 start script.sh # 启动 bash 脚本
3 h. l0 F* O9 K' g! ]/ i1 y
3 _9 b1 n: T3 L" u0 [( O4 b7 m' T
) Q# r0 x+ Y4 B8 C0 a& z1 J. ?
5 y/ ?0 \0 P" \: K1 W1 ~8 M/ j4 Q" L# O" V) x% s; d; c q# [
% `( k4 D* p0 g# M) A# D- q& h
# D) G) q, d( @6 ^) x# C
8 [+ Y3 ]' n9 u1 ]$ z% H7 G$ pm2 list # 列表 PM2 启动的所有的应用程序" Q0 ~) {* a8 ]$ e
# n- B. P0 Z+ Q4 f4 a# p8 M
* `# G: |6 A' T* W4 G. @, d3 M) G% P4 h" y" ~5 ?3 R. E
0 b+ a6 O8 W/ z T; X
7 d& v- f: n1 Y W5 \$ ]' d$ c
0 k: ?9 Z6 a0 P* V5 @* K3 `6 z! M
& w( e: a1 l0 k R# ^. D( K$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
8 J3 v) {7 e$ t1 P
/ D2 ^( T3 ?% g) W
4 e+ a: p! l V3 @+ ]5 R6 {& Y7 G2 k9 C O! V5 \7 k
' |- N, F2 C. q, A( L- D. L( H- V/ r4 c
# p' \. i n% j8 V* F, r' a0 `! b4 Y. l$ P
$ pm2 show [app-name] # 显示应用程序的所有信息
~ d0 k' B0 E: _/ y e( ?* M( J& |9 T1 f
! {! I* W: j9 k% ~: O, t
5 ~) S6 A& {" l. D: C
) o( P8 T# I: E2 G
' u3 K5 J. j2 ^ |
* K3 m- ^; o, A4 c$ v, M! ]" g' y6 A
$ pm2 logs # 显示所有的应用程序的日志
" F7 [. J/ t# _5 M! d" R0 m- z- ?+ ~
% [# x0 F6 R' C" Q& l! M1 l. R4 V, S
( M! ]0 {1 M3 i" E6 @
; i' v, [# N, ^! B2 ]: h. h2 g9 _ k) f0 c; z
% g u' k. D9 M
$ pm2 logs [app-name] # 显示指定应用程序的日志( _- o( n! W4 F& S' {
0 e2 L5 Q( T z3 I% v$ Z- \) ?: S: e
, ~/ ]9 ]& o0 q" W+ u: D3 Q5 d# }0 D
/ w' r7 X# n2 N5 x% d
- L- P) Z% S# {3 B8 B+ E9 C! V+ X/ i0 k, T/ b5 {9 X) i6 V, [
: k! J' p3 T, w! o$ f3 r7 ~
: [; u- A: _1 y& Q: I7 N3 a$ pm2 flush' C1 ~# j$ }6 V/ s3 e+ i& Y1 T5 U
. w; L7 V! G' _& k* M
5 B `' R2 N# H* E, k3 b( ?: [ i! ~
) l) R: b! N, F# Y" g, b5 ^2 e0 j* j/ z/ w& A' C9 l+ ^
( q& j B C) v, s) D
5 M/ y% e$ A& ]5 u. `
- h, Y+ ^$ |! y$ ?7 U$ pm2 stop all # 停止所有的应用程序0 l! H3 v/ q; W" O
8 j# G0 o' A. ]8 R4 G0 B
0 J- ^6 }4 g! E" ]9 E: v
; \, H0 l% S% ]: s) s- P1 T" v2 H; w: S! ^, \5 z8 P* m+ a J
0 L( o* @. z: r; W
# Z& ?3 P3 f4 j' x$ X$ I2 t) K
" o; H/ V5 h6 U9 i1 v F" d8 N$ pm2 stop 0 # 停止 id 为 0 的指定应用程序1 [! v& w; q b7 B8 @, {
8 P3 u* T( J0 x" v/ e( E
. M3 o& I) L$ t4 A3 C1 Q* n$ V- D2 r! v( ^; S7 o0 J
6 \9 R2 W9 P- t
- n! g+ A+ o1 I& n6 x0 N- I
5 V, r, Y4 _; B1 h1 x
8 t) I& S: ~( R) l
$ pm2 restart all # 重启所有应用
3 _+ q# A4 y/ o- V/ d' m# _
1 f& }. R/ o, ^6 c- V
2 t( G; l5 w2 D* K8 o2 R0 s. X! {" X" g, r
* K. n) ?3 i& F" Q3 f: k( ~. j" ^9 n( {
% @8 m/ ^; K3 b6 I
+ g6 {/ {0 e: M( T4 l1 ^
$ pm2 reload all # 重启 cluster mode 下的所有应用
* C% x* N: @; T- J
, B7 c% Q9 D" H) C" q6 g: X
. K# `, z- s1 s4 ~6 b3 B5 B
* [0 w& Z' d3 ~- A( Y: K3 o1 @7 q+ c7 B, z. ]
% v9 }7 `- z# O$ V) G: g- ] L
4 s* G0 r: e: J3 D: x8 u4 O T% t3 x, q8 U8 ?: ~% a1 n( _
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
) z t8 g+ _ {3 ?& J ~/ Y$ ?% l) ?3 z! S
7 `& q6 V) p' F+ ~5 h
( O: N* z7 a: a) P: x0 d6 {; P# `) u- k- O( N
5 w' I+ i# N! b0 R2 U5 H+ F
/ G9 b9 U- z7 A8 f
7 I( a- V% o4 s. n: {$ pm2 delete all # 关闭并删除所有应用
5 x# r) g3 y* x
7 ^, n1 I: q0 a% P+ v
5 y' r# r! o5 Z% I" k$ V3 I
/ w8 I4 K$ a5 u" ^) }- C0 i6 w F6 z8 w2 H% F/ k* \/ b+ m* f
( @0 k, k+ y! W8 e1 t
% C9 C: |( W& p' [
8 V9 b6 @/ _; I+ }' S. z) k$ pm2 delete 0 # 删除指定应用 id 0" H: p% Z" |, O, `% x
+ L' m! d+ Z4 a7 K
8 I- ?/ ]" T+ s' e
9 J" N# O" R* {* k8 O8 h- ]! D, R; V+ O) B) D& `- d+ O
, L/ B' t- n; |& U$ ?
) F# _% B) u! V: d) u, s: ^+ Q0 \: M' o7 a$ y
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例; i) e# w1 ~8 J U
& @; n& Z0 ~! D M5 _1 t! b$ V
$ Z( u2 h2 V& P5 o$ p% o; ]/ K; o+ }/ t& f
: C0 Y! e2 J* P
% F; l9 J0 d* c
: D; \: X5 O& s, }0 X& m' q" [. z: h
$ pm2 reset [app-name] # 重置重启数量
n! D4 Y% ~, ]. q$ \5 }' h; `8 N# I. k! k( d9 N" S1 z
, R. r/ _- k8 B B* f7 s/ |' p1 ]% w
0 K. V) s4 j: C2 {; a: z) n& Z W: g% J- o5 G
$ B) x4 R6 A \4 p/ k) i! u5 P9 P3 t( `) W* \% i
$ pm2 startup # 创建开机自启动命令
: ?4 |: E+ [$ N% w- f3 v4 @. A, c z7 T8 a# r
6 }+ |; v, S2 k {+ n- v+ U! q: \5 M7 ]
2 V P* Y& T; M6 _) M5 A9 h1 ~8 a
; g. x- c8 n( }6 ?
2 ~- o& L6 R1 X5 v8 F; ]% R
& u" ?/ c* e+ `) D0 I+ ?9 E8 c0 {$ pm2 save # 保存当前应用列表3 z: T8 z! t6 |0 {
1 c$ f7 } Z5 ~' T. [( @' ]
/ w- b( j P7 ]$ K9 `1 [
! n% ^9 n9 r7 _' C' f( P
6 L, l* ] X. J) Q9 w4 ~* i( M( Z$ G8 N+ v8 a
0 k, z; N( @0 p& f, [4 }3 M7 o! a& ]$ W) u [* T/ ^/ H
$ pm2 resurrect # 重新加载保存的应用列表
" T' g( `9 U# f. S
! U T) q; T9 z; t. ?1 C4 f& M' J9 `3 G+ H
. W% m/ B2 S7 Y! D7 o6 N, P: a' Y4 L* r x, c# ^& G
: N6 D: N5 L7 T1 ~( ~3 X
3 [. b8 C0 Z( ?0 n" b( @
6 s9 ?, d6 j) j. s5 m$ pm2 update # Save processes, kill PM2 and restore processes
8 e- O9 v- ]- y' ~3 c+ N1 R% n! O: D1 U
0 ~2 a% v/ ^" I4 o- v
! t+ ?9 u! q" q( S8 E+ p: f' J
! X+ a8 T( |7 n
' h9 J% {& L# [
, O# ]( ~* Q9 x# z1 ?
8 b4 C( _. V( D9 R$ pm2 generate # Generate a sample json configuration file
" z& u8 y. s& M5 d6 Y, q4 K& U8 S
# P6 F+ r0 c# s) ~$ ?
3 A; k0 g1 D2 _
/ }6 ~9 W( Z" v( \8 N举例:( J% U- V# L+ [8 y1 c
阿拉德的脚本启动方法
C* q9 h- H7 ?: K5 A6 P
& D& E; R* b T: u
% u# s- {4 ^/ ?* T' _/ n% T1 Y* S! O* i0 K$ E; e+ {
cd /www/wwwroot/gmald/src
% o% K) u& i9 T4 K9 L; C& ]
, {1 M1 Z5 O5 O- q( v) V
- T9 `& P6 {8 K7 G" P1 E
* a( }& x% y- S/ p1 f2 ?
" P! T6 u3 R: [) D% \, ~: W& W' ^ Z& v
' T1 _; M4 Y u: [ v+ F/ y1 ]! w! H/ k
5 [, Q: K/ f1 X# S- j& ]
pm2 start app.js
' Z. ~3 u* x+ ]4 _/ F) M- v6 X: t8 t9 ]+ L! H
6 \8 y+ L, r3 i) T N& Z; d0 I1 x* U( T. N$ ~5 C7 q8 s
3 E. H1 v: f4 j$ C
|
|