如何在 PM2 中配置自定义启动脚本?

阅读时长 4 分钟读完

前言

在进行前端项目的构建和部署时,我们经常会用到 PM2 来管理 Node.js 进程。在实际应用中,有时候需要运行一些自定义的启动脚本,例如需要读取环境变量或者配置文件等。本文将介绍如何在 PM2 中配置自定义启动脚本,以便能够更加灵活地处理我们的项目。

目录

  1. PM2 简介
  2. 自定义启动脚本的注意点
  3. 如何配置自定义启动脚本
  4. 示例代码

1. PM2 简介

PM2 是一个进程管理工具,可以帮助我们管理和监控 Node.js 应用。使用 PM2 可以实现自动重启、进程守护、负载均衡等功能,大大简化了 Node.js 应用的部署和运维过程。PM2 提供了一系列的 CLI 命令来管理应用,例如启动、停止、重启等操作。

2. 自定义启动脚本的注意点

在使用 PM2 运行应用时,可以使用 node app.js 这样的命令启动应用。但是如果需要运行自定义的脚本,需要注意以下几点:

  1. 自定义启动脚本需要具有执行权限,可以通过 chmod +x script.sh 命令添加可执行权限;
  2. 自定义启动脚本需要以 #!/bin/bash 或者 #!/usr/bin/env bash 开头,以确保脚本可以在 Bash 中运行;
  3. 自定义启动脚本需要在脚本中加入 & 符号,以确保脚本可以在后台运行,例如 nohup npm start &

3. 如何配置自定义启动脚本

在 PM2 中配置自定义启动脚本非常简单,只需要在 ecosystem.config.js 文件中指定启动命令即可。下面是一个示例的 ecosystem.config.js 文件:

-- -------------------- ---- -------
-------------- - -
  ----- --
    ----- --------
    ------- -------------
    ----- --------- --------------
    ---------- --
    ------------ -----
    ------ ------
    ------------------- -----
    ---- -
      --------- -------------
    --
    --------------- -
      --------- ------------
    -
  --
-

在上面的配置文件中,我们指定了启动脚本为 start.sh,并在 args 中传入了环境变量。在运行时,PM2 会执行 start.sh 这个脚本来启动应用。

在启动应用时,可以使用以下命令:

该命令将使用 ecosystem.config.js 文件中的 env_production 配置来启动应用。如果需要使用 env 中的配置,可以省略 --env production 参数。

另外,在修改了 ecosystem.config.js 文件后,需要重新启动应用才能生效,可以使用以下命令:

4. 示例代码

以下是一个简单的示例代码,它通过读取环境变量来获取当前运行的环境,并在不同的环境下输出不同的日志信息。

-- -------------------- ---- -------
-- --------

----- --- - ---------------------
--- --------

-- ---- --- -------------- -
  ------- - ----- -- - ----------- --------------
- ---- -- ---- --- ------------- -
  ------- - ----- -- - ---------- --------------
-

---------------------

在上面的示例中,我们将环境变量通过 export 命令传递给应用,并使用 nohup 命令将 Node.js 进程在后台运行,避免了关闭终端后进程被杀死的情况。

在启动应用时,可以使用以下命令:

在生产环境中,应用将输出 This is a production environment!,而在开发环境中,应用将输出 This is a development environment!

结语

在实际项目中,我们经常需要运行一些自定义的启动脚本,例如需要读取配置文件、生成临时文件等操作。通过 PM2 配置自定义启动脚本,我们可以实现更加灵活、高效的项目管理和部署。希望本文内容能够对大家在实际项目中的工作有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6781ffd8935627c900f2edc4

纠错
反馈