」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Ubuntu 實例上設定 PMor 多用戶訪問

在 Ubuntu 實例上設定 PMor 多用戶訪問

發佈於2024-08-28
瀏覽:187

Setting Up PMor Multi-User Access on Ubuntu Instance

在生产服务器上管理 Node.js 应用程序通常需要进程管理器来确保您的应用程序平稳运行并从崩溃中自动恢复。 PM2 是 Node.js 最受欢迎的进程管理器之一,提供强大的功能,例如进程监控、日志管理和集群模式。

如果您在 Google Cloud Ubuntu 实例上运行应用程序,您可能会遇到 PM2 进程仅对启动它们的用户可见的情况。如果您的服务器有多个用户(例如开发人员、系统管理员或自动部署脚本),这可能会出现问题。在这篇博文中,我们将逐步完成将 PM2 配置为系统范围服务的步骤,使其可供服务器上的所有用户访问。

为什么将 PM2 配置为系统范围服务?

默认情况下,PM2 作为启动它的用户下的进程运行。这意味着,如果您作为一个用户通过 SSH 登录服务器并启动 PM2 进程,则通过 SSH 登录的其他用户将看不到该进程。为了解决这个问题,我们可以将 PM2 配置为在系统级别作为服务运行。这种方法有几个优点:

  • 进程可见性:服务器上的所有用户都可以查看和管理PM2进程。
  • 自动启动:PM2将在系统启动时自动启动,确保您的应用程序始终运行。
  • 集中管理:日志和进程状态集中化,使您的应用程序管理更加轻松。

先决条件

在我们开始之前,请确保您具备以下条件:

  1. Google Cloud Ubuntu 实例。
  2. Node.js 和 npm 安装在实例上。
  3. PM2全球安装量。

第1步:全局安装PM2

为确保所有用户都能访问PM2,应全局安装PM2。您可以使用 npm 全局安装 PM2:

sudo npm install -g pm2

此命令将 PM2 安装在全局 npm 目录中,使其在系统范围内可用。

步骤 2:将 PM2 设置为系统范围服务

接下来,我们需要将 PM2 设置为服务运行。这将允许 PM2 在系统级别管理进程,而不是绑定到特定的用户会话。

运行以下命令生成PM2必要的启动脚本:

pm2 startup

此命令检测您的 Ubuntu 实例使用的 init 系统(通常是 systemd),并提供需要使用 sudo 执行的命令,以将 PM2 配置为系统范围的服务。输出将如下所示:

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u  --hp /home/

此处, 应替换为最初设置 PM2 的用户的用户名。这可确保 PM2 进程链接到正确的用户主目录。

第三步:执行生成的命令

复制上一步输出中提供的命令并执行。例如:

sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u johndoe --hp /home/johndoe

此命令创建一个 systemd 服务,该服务使用正确的环境变量和用户上下文启动 PM2。

步骤4:保存PM2进程列表

如果您已经有在 PM2 下运行的进程,并且希望在重新启动后仍保留该进程,则需要保存当前进程列表。这将创建一个转储文件,PM2 将在系统启动时使用该文件来恢复进程:

pm2 save

pm2 save 命令将当前托管进程列表保存到 ~/.pm2/dump.pm2 中的 JSON 文件中。 PM2 启动时会自动加载此文件,确保您的应用程序在重新启动后重新启动。

步骤 5:启用 PM2 服务以在引导时启动

为确保PM2在系统启动时自动启动,需要启用该服务:

sudo systemctl enable pm2-johndoe

将 johndoe 替换为适当的用户名。此命令启用 PM2 服务,确保它在系统启动时启动。

第 6 步:使用任何用户访问 PM2

现在 PM2 已配置为系统范围的服务,服务器上的任何用户都应该可以访问它。要检查进程的状态或列出它们,任何用户都可以运行:

pm2 list

此命令将显示由系统范围的 PM2 服务管理的进程列表,无论哪个用户登录。

步骤 7:共享日志的附加配置(可选)

如果您需要 PM2 日志可供多个用户访问,您可能需要调整文件权限或配置 PM2 将日志存储在共享目录中。这确保所有用户都可以查看和管理 PM2 下运行的进程的日志。

要更改日志文件目录,可以使用以下环境变量:

export PM2_HOME=/path/to/shared/pm2/home

在全局配置文件(如 /etc/environment)中设置它,以使其在会话中保持不变。

步骤 8:跨用户管理 PM2 流程

一旦将 PM2 设置为服务,用户就可以使用标准 PM2 命令来管理进程。但是,根据权限和用户角色,某些命令可能需要 sudo 访问权限。例如:

sudo pm2 list

该命令将列出系统范围的 PM2 服务管理的进程,方便管理员和开发人员协作进行服务器管理。

结论

在您的 Ubuntu 实例上将 PM2 设置为系统范围的服务可确保您的 Node.js 应用程序得到稳健管理并可供服务器上的所有用户访问。此设置在具有多个用户或自动部署流程的环境中特别有用,提供可靠且集中的方式来管理应用程序。

通过遵循本指南中概述的步骤,您可以确保 PM2 对所有用户可用,您的进程在系统重新启动后自动重新启动,并且日志易于访问。这不仅简化了服务器管理,还增强了生产中应用程序的可靠性。

编码愉快!

版本聲明 本文轉載於:https://dev.to/manojspace/setting-up-pm2-for-multi-user-access-on-ubuntu-instance-5g95?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • jQuery中如何有效率地取得隱藏元素的高度?
    jQuery中如何有效率地取得隱藏元素的高度?
    在 jQuery 中獲取隱藏元素的高度處理隱藏元素時,檢索其高度可能具有挑戰性。暫時顯示元素以測量其高度然後再次隱藏它的傳統方法似乎效率低下。有沒有更優化的解決方案? jQuery 1.4.2 方法這是一個使用 jQuery 1.4.2 的範例:$select.show(); optionHeigh...
    程式設計 發佈於2024-11-05
  • 為什麼我不能在 Go Struct 標籤中使用變數?
    為什麼我不能在 Go Struct 標籤中使用變數?
    在Go 結構體標籤中使用變數在Go 中,結構體標籤用於指定有關結構體中字段的元數據。雖然可以使用字串文字定義標籤,但嘗試在其位置使用變數會導致錯誤。 無效用法:const ( TYPE = "type" ) type Shape struct { Type str...
    程式設計 發佈於2024-11-05
  • Qopy:身為開發人員我最喜歡的剪貼簿管理器
    Qopy:身為開發人員我最喜歡的剪貼簿管理器
    身為開發人員,我一直在尋找可以讓我的工作流程更順暢、更有效率的工具。最近,我偶然發現了 Qopy,一個可以在 Linux 和 Windows 上運行的開源剪貼簿管理器。 什麼是Qopy? Qopy 是一個簡單的剪貼簿管理器,旨在改善標準剪貼簿體驗。它的設計宗旨是用戶友好、可靠且快速...
    程式設計 發佈於2024-11-05
  • 為什麼我的按鈕上的懸停效果不起作用?
    為什麼我的按鈕上的懸停效果不起作用?
    更改懸停時的按鈕顏色:替代解決方案嘗試更改懸停時按鈕的顏色時,如果出現以下情況,可能會令人沮喪該解決方案未能產生預期的效果。考慮提供的範例程式碼:a.button { ... } a.button a:hover{ background: #383; }此解決方案嘗試在連結懸停在「按...
    程式設計 發佈於2024-11-05
  • 僅使用 Python 建構前端
    僅使用 Python 建構前端
    對於專注於後端的開發人員來說,前端開發可能是一項艱鉅的、甚至是噩夢般的任務。在我職業生涯的早期,前端和後端之間的界線是模糊的,每個人都被期望能夠處理這兩者。 CSS,尤其是,是一場持續不斷的鬥爭;這感覺像是一個不可能的任務。 雖然我喜歡前端工作,但 CSS 對我來說仍然是一個複雜的挑戰,特別是因為...
    程式設計 發佈於2024-11-05
  • 如何在 Laravel 中執行 Cron 作業
    如何在 Laravel 中執行 Cron 作業
    在本教程中,我將向您展示如何在 Laravel 中運行 cron 作業,但最重要的是,我們會讓事情對我們的學生來說簡單易行。在建立 Laravel 應用程式時,我們將探索如何在您自己的電腦上設定和執行這些自動化任務。 首先,什麼是 cron 作業?將其視為您網站的私人助理 - 一個從不睡覺並且總是...
    程式設計 發佈於2024-11-05
  • 填滿如何影響內聯元素的間距以及如何解決衝突?
    填滿如何影響內聯元素的間距以及如何解決衝突?
    內聯元素上的填充:效果和限制內聯元素上的填充:效果和限制根據源碼,在內聯元素的頂部和底部添加內邊距並不影響周圍元素的間距。然而,「填充將與其他內聯元素重疊」這一說法表明,在某些特定情況下,填充確實會產生影響。 了解重疊填充填充主要影響它應用於的元素,增加其垂直邊框。在正常情況下,這不會導致與相鄰的內...
    程式設計 發佈於2024-11-05
  • Django 基於類別的視圖變得簡單
    Django 基於類別的視圖變得簡單
    眾所周知,django在開發Web應用程式時使用MVT(模型-視圖-模板)進行設計。 View 本身是一個可呼叫的,它接受請求並回傳回應。它不僅僅是一個函數,因為 Django 提供了一種稱為「基於類別的視圖」的東西,因此開發人員可以使用基於類別的方法或您可以說 OOP 方法來編寫視圖。這個基於類...
    程式設計 發佈於2024-11-05
  • 使用 VAKX 建立您的無程式碼 AI 代理
    使用 VAKX 建立您的無程式碼 AI 代理
    If you’ve been keeping up with the AI space, you already know that AI agents are becoming a game-changer in the world of automation and customer inter...
    程式設計 發佈於2024-11-05
  • 這裡是我如何在 jQuery Datatable 中實作基於遊標的分頁。
    這裡是我如何在 jQuery Datatable 中實作基於遊標的分頁。
    在 Web 應用程式中處理大型資料集時,分頁對於效能和使用者體驗至關重要。標準的基於偏移量的分頁(通常與資料表一起使用)對於大型資料集可能效率低。 基於遊標的分頁提供了一種效能更高的替代方案,特別是在處理即時更新或大量資料載入時。在本文中,我將引導您了解如何在 jQuery DataTable 中...
    程式設計 發佈於2024-11-05
  • 為什麼同步引擎可能是 Web 應用程式的未來
    為什麼同步引擎可能是 Web 應用程式的未來
    在不断发展的 Web 应用程序世界中,效率、可扩展性和无缝实时体验至关重要。传统的 Web 架构严重依赖于客户端-服务器模型,这些模型可能难以满足现代对响应能力和同步的需求。这就是同步引擎发挥作用的地方,它为开发人员当今面临的许多挑战提供了一个有前途的解决方案。但同步引擎到底是什么?为什么它们可能是...
    程式設計 發佈於2024-11-05
  • Python 電腦視覺簡介(第 1 部分)
    Python 電腦視覺簡介(第 1 部分)
    注意:在这篇文章中,我们将仅使用灰度图像以使其易于理解。 什么是图像? 图像可以被认为是值的矩阵,其中每个值代表像素的强度。图像格式主要分为三种类型: Binary:此格式的图像由值为 0(黑色)和 1(白色)的单个二维矩阵表示。这是最简单的图像表示形式。 Grey-Scale:在此...
    程式設計 發佈於2024-11-05
  • 網站 HTML 程式碼
    網站 HTML 程式碼
    我一直在嘗試建立一個與航空公司相關的網站。我只是想確認我是否可以使用人工智慧生成程式碼來產生整個網站。 HTML 網站是否相容於博客,或者我應該使用 JavaScript?這是我用作演示的程式碼。 <!DOCTYPE html> <html lang="en">[](url...
    程式設計 發佈於2024-11-05
  • 像程式設計師一樣思考:學習 Java 基礎知識
    像程式設計師一樣思考:學習 Java 基礎知識
    本文介紹了 Java 程式設計的基本概念和結構。它首先介紹了變數和資料類型,然後討論了操作符和表達式,以及控制流程。其次,它解釋了方法和類,然後介紹了輸入和輸出操作。最後,本文透過一個工資計算器的實際範例展示了這些概念的應用。 像程式設計師一樣思考:掌握Java 基礎1. 變數與資料型別 ]Java...
    程式設計 發佈於2024-11-05
  • PHP GD 可以比較兩個影像的相似性嗎?
    PHP GD 可以比較兩個影像的相似性嗎?
    PHP GD 可以確定兩個影像的相似度嗎? 正在考慮的問題詢問是否可以使用以下命令確定兩個圖像是否相同PHP GD 通過比較它們的差異。這需要獲取兩個影像之間的差異並確定它是否完全由白色(或任何統一的顏色)組成。 根據所提供的答案,雜湊函數(如其他回應所建議的)不適用於此情境。比較必須涉及圖像內容而...
    程式設計 發佈於2024-11-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3