前言
在进行前端项目的构建和部署时,我们经常会用到 PM2 来管理 Node.js 进程。在实际应用中,有时候需要运行一些自定义的启动脚本,例如需要读取环境变量或者配置文件等。本文将介绍如何在 PM2 中配置自定义启动脚本,以便能够更加灵活地处理我们的项目。
目录
- PM2 简介
- 自定义启动脚本的注意点
- 如何配置自定义启动脚本
- 示例代码
1. PM2 简介
PM2 是一个进程管理工具,可以帮助我们管理和监控 Node.js 应用。使用 PM2 可以实现自动重启、进程守护、负载均衡等功能,大大简化了 Node.js 应用的部署和运维过程。PM2 提供了一系列的 CLI 命令来管理应用,例如启动、停止、重启等操作。
2. 自定义启动脚本的注意点
在使用 PM2 运行应用时,可以使用 node app.js 这样的命令启动应用。但是如果需要运行自定义的脚本,需要注意以下几点:
- 自定义启动脚本需要具有执行权限,可以通过
chmod +x script.sh命令添加可执行权限; - 自定义启动脚本需要以
#!/bin/bash或者#!/usr/bin/env bash开头,以确保脚本可以在 Bash 中运行; - 自定义启动脚本需要在脚本中加入
&符号,以确保脚本可以在后台运行,例如nohup npm start &;
3. 如何配置自定义启动脚本
在 PM2 中配置自定义启动脚本非常简单,只需要在 ecosystem.config.js 文件中指定启动命令即可。下面是一个示例的 ecosystem.config.js 文件:
-- -------------------- ---- -------
-------------- - -
----- --
----- --------
------- -------------
----- --------- --------------
---------- --
------------ -----
------ ------
------------------- -----
---- -
--------- -------------
--
--------------- -
--------- ------------
-
--
-在上面的配置文件中,我们指定了启动脚本为 start.sh,并在 args 中传入了环境变量。在运行时,PM2 会执行 start.sh 这个脚本来启动应用。
在启动应用时,可以使用以下命令:
pm2 start ecosystem.config.js --env production
该命令将使用 ecosystem.config.js 文件中的 env_production 配置来启动应用。如果需要使用 env 中的配置,可以省略 --env production 参数。
另外,在修改了 ecosystem.config.js 文件后,需要重新启动应用才能生效,可以使用以下命令:
pm2 reload ecosystem.config.js --env production
4. 示例代码
以下是一个简单的示例代码,它通过读取环境变量来获取当前运行的环境,并在不同的环境下输出不同的日志信息。
-- -------------------- ---- ------- -- -------- ----- --- - --------------------- --- -------- -- ---- --- -------------- - ------- - ----- -- - ----------- -------------- - ---- -- ---- --- ------------- - ------- - ----- -- - ---------- -------------- - ---------------------
# start.sh #!/bin/bash export NODE_ENV=$1 nohup node index.js > /dev/null 2>&1 &
在上面的示例中,我们将环境变量通过 export 命令传递给应用,并使用 nohup 命令将 Node.js 进程在后台运行,避免了关闭终端后进程被杀死的情况。
在启动应用时,可以使用以下命令:
pm2 start ecosystem.config.js --env production
在生产环境中,应用将输出 This is a production environment!,而在开发环境中,应用将输出 This is a development environment!。
结语
在实际项目中,我们经常需要运行一些自定义的启动脚本,例如需要读取配置文件、生成临时文件等操作。通过 PM2 配置自定义启动脚本,我们可以实现更加灵活、高效的项目管理和部署。希望本文内容能够对大家在实际项目中的工作有所帮助。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/6781ffd8935627c900f2edc4