PM2 管理后端(設置項目自啟動)

查看pm2管理

pm2 list
┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name         │ namespace   │ version │ mode    │ pid      │ uptime │ ?    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ app          │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │
│ 1  │ steak-api    │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │

1.進入后端路徑

cd /usr/share/nginx/html/server

2.使用 PM2 啟動應用

pm2 start app.js --name "NewsSystem-api"

此項目的 Express 應用需要使用?bin/www?文件來啟動,而不是?app.js

pm2 start ./bin/www --name NewsSystem-api
pm2 start ./bin/www --name NewsSystem-api
[PM2] Starting /usr/share/nginx/html/server/bin/www in fork_mode (1 instance)
[PM2] Done.
┌────┬───────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name              │ namespace   │ version │ mode    │ pid      │ uptime │ ?    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼───────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 4  │ NewsSystem-api    │ default     │ 0.0.0   │ fork    │ 113151   │ 0s     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │
│ 0  │ app               │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │
│ 1  │ steak-api         │ default     │ N/A     │ fork    │ N/A      │ 8h     │ 0    │ online    │ 0%       │ 0b       │ root     │ disabled │

3.讓 PM2 開機自啟

1.pm2 startup

pm2 startup systemd

2.pm2 save

[root@VM-4-8-centos server]# pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2

4.驗證整個流程是否成功

1. 重啟整個服務器

sudo reboot

2.讓 PM2 恢復所有保存的應用

pm2 resurrect

這個命令模擬了系統啟動時?pm2-root.service?所做的工作。執行后,檢查你的應用?my-api?的狀態是否從?stopped?變成了?online,并且網站接口也恢復了。

如果?resurrect?命令成功,那就證明你的開機自啟配置完全正確。


總結:以后更新代碼后的完整工作流

現在的生產環境部署流程應該是這樣的:

  1. 部署新代碼?(例如通過?git pull)

  2. 安裝新增依賴?(如果有的話)

  3. 重啟 PM2 進程以使新代碼生效

    pm2 restart my-api
  4. (可選) 再次保存進程列表?(通常不需要,除非你新增或刪除了進程)

    pm2 save

至此,已經擁有了一個完全體的生產環境 Node.js 服務,它具備了:

  • 后臺運行

  • 崩潰自動重啟

  • 服務器開機自動啟動

  • 便捷的日志查看?(pm2 logs)

  • 便捷的狀態管理?(pm2 status)

以后再也不需要手動輸入?npm start?了。


應用生命周期管理

# 啟動一個應用并為其命名(推薦)
pm2 start app.js --name "my-api"# 啟動應用并監聽文件變化(用于開發環境,文件修改后自動重啟)
pm2 start app.js --name "my-api" --watch# 啟動應用并傳遞環境變量(NODE_ENV=production)
pm2 start app.js --name "my-api" --env production# 重啟指定應用(代碼更新后常用)
pm2 restart my-api# 優雅地重載應用(集群模式時逐個重啟,實現零停機更新)
pm2 reload my-api# 停止指定應用(停止但不從PM2列表中移除)
pm2 stop my-api# 刪除指定應用(從PM2列表中完全移除)
pm2 delete my-api# 停止并刪除所有應用
pm2 delete all

監控與信息查看

# 查看所有被PM2管理的應用狀態(最常用)
pm2 status
# 或者
pm2 list# 實時監控所有應用的CPU和內存使用情況(類似top命令)
pm2 monit# 查看指定應用的實時日志(-f 表示follow,持續輸出)
pm2 logs my-api
pm2 logs my-api --lines 100  # 查看最后100行日志# 查看所有應用的實時日志
pm2 logs# 清空指定應用的日志文件
pm2 flush my-api# 顯示指定應用的詳細信息(包括路徑、環境變量等)
pm2 show my-api# 顯示所有應用的詳細信息
pm2 show all

集群模式與性能

# 以集群模式啟動應用,自動利用所有CPU核心(用于提升性能)
pm2 start app.js -i max --name "my-api-cluster"# 啟動指定數量的實例(例如4個實例)
pm2 start app.js -i 4 --name "my-api-cluster"

啟動配置與持久化

# 生成一個示例的PM2配置文件(ecosystem.config.js)
pm2 init# 使用配置文件啟動應用(推薦用于復雜配置)
pm2 start ecosystem.config.js# 保存當前進程列表到磁盤,用于開機自啟(非常重要!)
pm2 save# 恢復上次保存的進程列表(模擬開機自啟過程)
pm2 resurrect

系統服務與自啟

# 配置PM2為系統服務,實現開機自啟(針對當前用戶)
pm2 startup# 移除開機自啟配置
pm2 unstartup# 如果pm2 startup提示需要以sudo運行,請使用:
pm2 startup systemd -u your_username --hp /home/your_username

維護與實用命令

# 平滑重啟PM2自身(不中斷當前管理的進程)
pm2 gracefulReload# 生成當前環境的啟動腳本(用于調試)
pm2 startup [platform] --help# 查看PM2的版本信息
pm2 --version# 強制PM2觸發一個快照并發送到PM2 Plus(如果使用的話)
pm2 update

配置文件示例 (ecosystem.config.js)

對于生產環境,強烈推薦使用配置文件:

module.exports = {apps: [{name: "my-api",           // 應用名稱script: "./app.js",       // 入口文件instances: "max",         // 集群實例數,max表示按CPU核心數exec_mode: "cluster",     // 集群模式env: {NODE_ENV: "development", // 開發環境變量},env_production: {NODE_ENV: "production",  // 生產環境變量(使用--env production啟用)},watch: false,             // 是否監聽文件變化(生產環境應為false)max_memory_restart: "1G", // 內存超過1G自動重啟log_file: "logs/combined.log",      // 合并日志文件out_file: "logs/out.log",           // 標準輸出日志error_file: "logs/err.log",         // 錯誤日志time: true                // 日志中顯示時間戳}]
};

使用配置文件:

# 啟動所有在配置文件中定義的應用
pm2 start ecosystem.config.js# 使用生產環境變量啟動
pm2 start ecosystem.config.js --env production# 重啟配置文件中定義的應用
pm2 restart ecosystem.config.js

作為日常開發的速查手冊。pm2 statuspm2 logspm2 restart?這幾個是最常用的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96490.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96490.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CCN中商再獲三項知識產權,為數字化服務添動能

上海中商網絡股份有限公司(CCN中商)依托持續的研發投入與深厚的技術積淀,在知識產權領域再獲重要突破——成功收獲三項知識產權,囊括實用新型專利《一種3D霓彩智感雙條光柱印刷用全自動生產線》、發明專利《一種一物一碼關聯系統及…

使用LTspice仿真一個異步BUCK電路

確定異步BUCK的規格 輸入電壓(Vin):12V 輸出電壓(Vout):6V 最大輸出電流(Iout):3A 開關頻率(fsw):400kHz 輸出電壓紋波(Δ…

R語言對excel中多個sheet子表批量進行地理探測器計算

## 基本設置 ## 1) 設定你的工作目錄&#xff08;保持你的原路徑不變&#xff09; setwd("D:/*****/*****/******")## 2) 文件名&#xff08;與xlsx實際名字保持一致&#xff09; xlsx_file <- "驅動因素&#xff08;中低收入&#xff09;.xlsx"## 依…

C++ JSON 數據庫:jsoncpp

jsoncpp1. JSON數據1.1 JSON 的基本語法規則1. 基礎語法要求兩種核心數據結構JSON 與其他數據格式的對比1.2 JSON 的典型應用場景1.3 JSON 解析與生成工具2. 編程語言庫&#xff08;解析/生成&#xff09;1.4 常見錯誤與注意事項2. jsoncpp2.1 基本用法1. 安裝與集成2. 核心類與…

《蒼穹外賣》項目日記_Day9

前言&#xff1a; 上午就把今天任務完成了&#xff0c;就繼續往后學了一些知識&#xff0c;晚上寫下筆記總結一下。 今日完成任務&#xff1a; 調用百度地圖開放平臺&#xff0c;優化用戶下單業務學習SpringTask&#xff0c;定時處理超時、派送中訂單學習WebSocket&#xff0c;…

人工智能學習:Transformer結構中的編碼器層(Encoder Layer)

Transformer結構中的編碼器層(Encoder Layer) 一、編碼器層介紹 概念 編碼器層(Encoder Layer)是Transformer編碼器的基本構建單元,它重復堆疊形成整個編碼器,負責逐步提取輸入序列的特征。每個編碼器層由兩個核心子層組成: 多頭自注意力機制(Multi-Head Self-Attentio…

2018年下半年 系統架構設計師 綜合知識

1.在磁盤調度管理中&#xff0c;應先進行移臂調度&#xff0c;再進行旋轉調度。假設磁盤移動臂位于21 號柱面上&#xff0c;進程的請求序列如下表所示。如果采用最短移臂調度算法&#xff0c;那么系統的響應 序列應為(D )。A.?②⑧③④⑤①⑦⑥⑨ …

數據庫的連接_qt

數據庫的連接形式可以通過cmd查看 1.獲取 UI 輸入的連接參數 // 獲取主機名&#xff08;如"localhost"或IP地址&#xff09; QString hostStr hostEdit->text(); // 從hostEdit控件獲取文本 QByteArray hostBa hostStr.toUtf8(); // 轉換為UTF-8編碼的字節數…

HTML 設計與使用入門

HTML 設計與使用入門 一、完整示例&#xff08;基礎頁面模板&#xff09;這是一個結構清晰、可直接拷貝運行的最小 HTML 模板&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"utf-8"><meta name"vie…

Gradio全解11——Streaming:流式傳輸的視頻應用(2)——Twilio:網絡服務提供商

Gradio全解11——Streaming&#xff1a;流式傳輸的視頻應用&#xff08;2&#xff09;——Twilio&#xff1a;網絡服務提供商11.2 Twilio&#xff1a;網絡服務提供商11.2.1 Twillo穿透服務與TURN服務器1. 什么是STUN、TURN和ICE&#xff1f;2. Twilio介紹及網絡穿透服務3. Twil…

【更新至2024年】2009-2024年各地級市金融科技水平數據

【更新至2024年】2009-2024年各地級市金融科技水平數據 1、時間&#xff1a;2009-2024年 2、來源&#xff1a;天眼查 3、指標&#xff1a;年份、省份、地級市、地級市代碼、當年新注冊金融科技公司數量、累計注冊金融科技公司數量、金融科技水平 4、范圍&#xff1a;地級市…

一般軟件加載顯示圖片的流程

目錄 1、一般圖片瀏覽軟件的流程&#xff08;Qt 或類似框架&#xff09;&#xff1a; 1?? 讀取原始數據 2?? 解析圖片格式 3?? 存儲到內部可用的繪制對象 4?? 顯示到界面 ? 總結 2、那什么叫“QPixmap 在 Qt 里就是“顯示專用的像素緩存”&#xff0c;不是原始…

【論文閱讀】REFRAG:一個提升RAG解碼效率的新思路

引言 看到一則報道[1]&#xff0c;重組后的Meta實驗室在9月1號發布了一篇關于提升RAG解碼效率的論文&#xff0c;提出的思路有點啟發作用&#xff0c;于是把原文下載下來仔細看下。 論文標題&#xff1a;REFRAG: Rethinking RAG based Decoding 論文地址&#xff1a;https://ar…

QT M/V架構開發實戰:QFileSystemModel介紹

目錄[TOC](目錄)前言一、QFileSystemModel初步介紹二、基本功能1.創建2.基本屬性與方法三、示例&#xff08;簡單的文件瀏覽器&#xff09;四、性能注意事項前言 本文主要介紹的是使用代碼生成的情況下對控件的介紹&#xff0c;包括擁有的功能及能修改的樣式&#xff0c;也會說…

視頻生成迎來效率革命!字節提出視頻生成稀疏注意力機制,計算量降20倍,速度升17.79倍!

論文鏈接&#xff1a;https://arxiv.org/pdf/2509.01085亮點直擊BSA——一種可訓練的雙向動態稀疏注意力框架&#xff0c;該框架首次在視頻擴散訓練中對全注意力機制中的查詢&#xff08;Query&#xff09;及鍵值對&#xff08;Key-Value&#xff09;進行正交稀疏化處理以加速訓…

STM32HAL庫_cubeMX

ADC簡介STM32f103的是12位逼近型ADC代碼連續非掃描模式&#xff08;1個通道&#xff09;1&#xff1a;校準ADC&#xff08;這個可要可不要&#xff09;2&#xff1a;ADC初始化3&#xff1a;配置ADC通道&#xff08;這個函數只有一個通道時就是可要可不要&#xff09;4&#xff…

【Qt】清空QDateTimeEdit

代碼 ui->startDate->setSpecialValueText(" "); //這里是空格 ui->startDate->setMinimumDate(QDate(2024, 1, 1)); ui->startDate->setDate(QDate::fromString("2024-01-01", "yyyy-MM-dd"));原理 設置特殊值顯示文本&#…

LiTS 2017 datasets

下載記錄 論文地址&#xff1a;https://doi.org/10.1016/j.media.2022.102680 官方下載鏈接&#xff1a;https://competitions.codalab.org/competitions/17094 進入鏈接后&#xff0c;需要先注冊才能拿到下載點擊Train data下面的Mirro1&#xff0c;在google云盤會看到Trai…

kafka3.8集群搭建

kafka集群需要三臺機器搭建&#xff0c;并使用內置zookeeperIP10.0.0.110.0.0.210.0.0.3安裝jdk # ubuntu sudo apt install -y openjdk-8-jdk-headless # centos sudo yum install -y java-1.8.0-openjdk下載kafka wget https://archive.apache.org/dist/kafka/3.8.1/kafka_2…

從15kHz 到20MHz:為什么LTE帶寬不能被子載波間隔整除?

從 15 kHz 到 20 MHz&#xff1a;為什么 LTE 帶寬不能被子載波間隔整除&#xff1f; 1. 引言 在 LTE 系統中&#xff0c;子載波間隔被固定為 15 kHz&#xff0c;而系統帶寬卻被設計為 1.4、3、5、10、15、20 MHz 六個檔位。乍一看&#xff0c;這些帶寬似乎無法被 15 kHz 整除&a…