pm2管理维护开发环境 jar 包

使用 PM2 管理运维 Java JAR 包教程

PM2 是一个强大的进程管理工具,通常用于 Node.js 应用的管理,但它也可以用来管理其他类型的应用,例如 Java 的 JAR 包。本教程将指导你如何使用 PM2 来管理运维 Java JAR 包。

脚本

APP_NAME="$2"

usage() {
	echo "Usage: sh 执行脚本.sh [start|stop|restart]"
	exit 1
}
#检查程序是否在运行
is_exist() {
	pid=$(ps -ef | grep  $APP_NAME | grep -v grep | awk '{print $2}')
	#如果不存在返回1,存在返回0
	if [ -z "${pid}" ]; then
		return 1
	else
		return 0
	fi
}

#启动方法
start() {
	is_exist
	if [ $? -eq "0" ]; then
		echo "${APP_NAME} is already running. pid=${pid} ."
	else
		if [ ! -d "./pm2" ]; then
		  echo "目录不存在,正在创建..."
		  mkdir -p "./pm2"
		fi
		jar_name="${APP_NAME//.jar/}"
		if [ ! -f "./pm2/$jar_name" ]; then
		  echo '{'                                                                                                         >./pm2/$jar_name.json
		  echo '  "apps": {'                                                                                               >>./pm2/$jar_name.json
		  echo '    "name": "'$jar_name'", // 应用名称'                                                                    >>./pm2/$jar_name.json
		  echo '    "script": "java", // 命令名称'                                                                         >>./pm2/$jar_name.json
		  echo '	"exec_mode": "fork",'                                                                                  >>./pm2/$jar_name.json
		  echo '	"exec_interpreter": "",'                                                                               >>./pm2/$jar_name.json
		  echo '	"merge_logs": false,//追加日志false'                                                                   >>./pm2/$jar_name.json
		  echo '    "min_uptime": "60s",						//最小运行时间(范围内应用终止会触发异常退出而重启)'        >>./pm2/$jar_name.json
		  echo '	"max_restarts": 30,							//异常退出重启的次数'                                      >>./pm2/$jar_name.json
		  echo '	"autorestart": true,						//发生异常情况自动重启'                                    >>./pm2/$jar_name.json
		  echo '	"restart_delay": "60",						//异常重启的延时重启时间'                                  >>./pm2/$jar_name.json
		  echo '    "error_file": "./target/pm2/'$jar_name'/err.log", // 错误日志'                                         >>./pm2/$jar_name.json
		  echo '    "out_file": "./target/pm2/'$jar_name'/out.log", // 输出日志'                                           >>./pm2/$jar_name.json
		  echo '    "log_date_format": "YYYY/MM/DD HH:mm:ss", // 日志日期格式'                                             >>./pm2/$jar_name.json
		  echo '    "args": ['                                                                                             >>./pm2/$jar_name.json
		  echo '      "-server","-jar","-Dfile.encoding=utf-8", "-Dspring.profiles.active=dev", "'$jar_name'.jar"'         >>./pm2/$jar_name.json
		  echo '    ]'                                                                                                     >>./pm2/$jar_name.json
		  echo '  }'                                                                                                       >>./pm2/$jar_name.json
		  echo '}'                                                                                                         >>./pm2/$jar_name.json
		  pm2 start ./pm2/$jar_name.json
		fi
	fi
}

#停止方法
stop() {
	is_exist
	if [ $? -eq "0" ]; then
		jar_name="${APP_NAME//.jar/}"
		pm2 stop ./pm2/$jar_name.json
	else
		echo "${APP_NAME} is not running"
	fi
}

#输出运行状态
status() {
	is_exist
	if [ $? -eq "0" ]; then
		echo "${APP_NAME} is running. Pid is ${pid}"
	else
		echo "${APP_NAME} is NOT running."
	fi
}

#重启
restart() {
	stop
	start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
	start
	;;
"stop")
	stop
	;;
"status")
	status
	;;
"restart")
	restart
	;;
*)
	usage
	;;
esac

前提条件

在开始之前,请确保你已经安装了以下工具:

  1. Node.js 和 npm:PM2 是基于 Node.js 的工具,因此需要先安装 Node.js 和 npm。

    • 检查是否已安装:
      node -v
      npm -v
      
    • 如果未安装,请参考 Node.js 官方文档 进行安装。
  2. Java 环境:确保你的系统已经安装了 Java 运行时环境(JRE)或 Java 开发工具包(JDK)。

    • 检查是否已安装:
      java -version
      
    • 如果未安装,请参考 Java 官方文档 进行安装。
  3. PM2:如果尚未安装 PM2,请先安装:

    npm install pm2 -g
    

使用 PM2 管理 JAR 包

1. 启动 JAR 包

使用 PM2 启动一个 Java JAR 包非常简单。假设你的 JAR 包名为 app.jar,可以使用以下命令启动:

pm2 start java -- -jar app.jar
  • java:指定使用 Java 运行环境。
  • -jar app.jar:传递给 Java 的命令行参数,表示运行指定的 JAR 包。

2. 指定应用名称

为了方便管理,可以为你的应用指定一个名称。例如,将应用命名为 my-java-app

pm2 start java --name my-java-app -- -jar app.jar

3. 传递 JVM 参数

如果需要为 Java 虚拟机(JVM)传递参数,例如设置内存大小,可以在命令中添加参数。例如:

pm2 start java --name my-java-app -- -Xmx512m -Xms256m -jar app.jar
  • -Xmx512m:设置最大堆内存为 512MB。
  • -Xms256m:设置初始堆内存为 256MB。

4. 查看运行中的应用

使用以下命令查看当前由 PM2 管理的所有应用:

pm2 list

你会看到类似以下的输出:

┌─────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name         │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ my-java-app  │ default     │ N/A     │ fork    │ 12345    │ 2m     │ 0    │ online    │ 0%       │ 45.2mb   │ user     │ disabled │
└─────┴──────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

5. 查看应用日志

PM2 会自动捕获应用的日志。你可以使用以下命令查看日志:

  • 查看实时日志:

    pm2 logs my-java-app
    
  • 查看最近的日志:

    pm2 logs my-java-app --lines 100
    

6. 停止应用

如果需要停止应用,可以使用以下命令:

pm2 stop my-java-app

7. 重启应用

重启应用的命令如下:

pm2 restart my-java-app

8. 删除应用

如果不再需要管理某个应用,可以将其从 PM2 中删除:

pm2 delete my-java-app

高级配置

1. 使用配置文件

PM2 支持通过配置文件来管理应用。创建一个 ecosystem.config.js 文件,内容如下:

module.exports = {
  apps: [
    {
      name: 'my-java-app',
      script: 'java',
      args: '-jar app.jar',
      exec_mode: 'fork',
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: '1G',
      env: {
        NODE_ENV: 'production',
      },
    },
  ],
};

然后使用以下命令启动应用:

pm2 start ecosystem.config.js

2. 设置开机自启动

为了让应用在服务器重启后自动启动,可以使用以下命令:

pm2 startup
pm2 save
  • pm2 startup:生成启动脚本。
  • pm2 save:保存当前 PM2 管理的应用列表。

结语

通过 PM2,你可以轻松管理 Java JAR 包,享受进程管理、日志捕获、自动重启等功能。PM2 的强大功能不仅限于 Node.js 应用,还可以扩展到其他类型的应用,如 Java 应用。

更多关于 PM2 的详细用法,请参考 PM2 官方文档

posted @ 2025-02-16 19:04  码上上任  阅读(220)  评论(0)    收藏  举报