启动器startup.sh

在实际生产环境中使用 startup.sh 脚本而不是直接使用 java -jar 命令的原因主要有以下几点:

1. 环境配置和管理

系统环境设置

  • 设置 JAVA_HOMEJRE_HOME 等环境变量
  • 配置系统级参数如 ulimit(文件描述符限制、进程数限制等)
  • 设置工作目录和日志目录

JVM 参数配置

# 示例:在 startup.sh 中可以预定义 JVM 参数
JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC"

2. 应用配置管理

外部化配置

  • 指定不同环境的配置文件:
    # 指定不同环境的配置文件
    java -jar app.jar --spring.profiles.active=prod
    

配置文件路径管理

  • 设置配置文件、日志文件的路径
  • 管理敏感配置(如数据库密码)通过环境变量传递

3. 进程管理

后台运行

# startup.sh 可以确保应用在后台运行
nohup java -jar app.jar > app.log 2>&1 &

PID 管理

  • 记录进程 ID,便于后续的停止和监控操作
  • 防止重复启动同一应用

4. 日志管理

日志重定向

# 将标准输出和错误输出重定向到日志文件
nohup java -jar app.jar > /var/log/app/console.log 2>&1 &

日志轮转集成

  • 与 logrotate 等日志管理工具集成

5. 启动前检查

依赖服务检查

  • 检查数据库、消息队列等依赖服务是否可用
  • 网络连通性检查

资源检查

  • 检查磁盘空间、内存是否充足
  • 检查必需的配置文件是否存在

6. 标准化运维

统一接口

  • 提供标准的启动、停止、重启接口
  • 便于运维团队管理和自动化部署

集成监控

  • 集成健康检查、监控脚本
  • 发送启动状态通知

7. 安全考虑

权限控制

  • 以特定用户身份运行应用
  • 设置文件和目录权限

敏感信息处理

  • 通过环境变量而非命令行参数传递敏感信息
  • 避免敏感信息在进程列表中暴露

典型的 startup.sh 示例

#!/bin/bash

# 设置环境变量
export JAVA_HOME=/usr/java/jdk
export APP_HOME=/opt/myapp
export LOG_PATH=/var/log/myapp

# JVM 参数
JAVA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=prod"
JAVA_OPTS="$JAVA_OPTS -Dlogging.config=$APP_HOME/config/logback-spring.xml"

# 应用参数
APP_JAR="$APP_HOME/myapp.jar"
APP_NAME="myapp"

# 检查应用是否已经在运行
if [ -f "$APP_HOME/$APP_NAME.pid" ]; then
  PID=$(cat $APP_HOME/$APP_NAME.pid)
  if ps -p $PID > /dev/null; then
    echo "$APP_NAME is already running (PID: $PID)"
    exit 1
  fi
fi

# 启动应用
nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar $APP_JAR > $LOG_PATH/console.log 2>&1 &

# 保存 PID
echo $! > $APP_HOME/$APP_NAME.pid

echo "$APP_NAME started with PID $!"

这种方式提供了更好的可控性、可维护性和安全性,是企业级应用部署的标准实践。

posted @ 2025-08-28 20:55  一刹流云散  阅读(19)  评论(0)    收藏  举报