脚本启动jar包

本文介绍了一个用于在服务器上启动、停止、重启及查看状态的Shell脚本示例,该脚本用于管理部署在服务器上的Java应用程序(Jar包)。
这里主要为shell脚本启动部署在服务器中jar包

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=demo.jar

#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh demo.sh [start|stop|restart|status]"
    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
     nohup java -jar $APP_NAME > /dev/null 2>&1 &
   fi
}

#停止方法
stop() {
   is_exist
   if [ $? -eq "0" ]; then
     kill -9 $pid
   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

其中demo.jar为我部署在服务器中的应用(demo.jar根据自己jar包名字更改)

  • 启动 sh demo.sh start
  • 停止 sh demo.sh stop
  • 重启 sh demo.sh restart
  • 查看状态 sh demo.sh status
<think>我们正在解决的核心问题是:如何编写脚本在MobaXterm中启动部署的后端jar。 根据用户之前的上下文,我们已经知道用户可能已经通过MobaXterm连接了服务器,并且已经将jar上传到了服务器上。 现在需要编写一个启动脚本,以便于启动jar,并且要求脚本能够保证程序在后台运行,即使断开SSH连接也不会中断。 我们之前已经提到了一个简单的启动脚本(start.sh),但这里需要更详细地解释和扩展。 步骤: 1. 创建启动脚本文件。 2. 编写脚本内容,启动命令、日志输出、后台运行等。 3. 赋予脚本执行权限。 4. 运行脚本。 另外,考虑到可能需要停止脚本,我们还可以编写一个停止脚本启动脚本示例(start.sh): ```bash #!/bin/bash # 定义变量 APP_NAME="your-app.jar" LOG_FILE="app.log" PID_FILE="app.pid" # 检查是否已经运行 if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null; then echo "应用程序已经在运行,进程ID: $PID" exit 1 else # 进程不存在,删除旧的PID文件 rm -f $PID_FILE fi fi # 启动应用,将输出重定向到日志文件,并将进程ID保存到PID文件 nohup java -jar $APP_NAME > $LOG_FILE 2>&1 & echo $! > $PID_FILE echo "应用程序启动成功,进程ID: $(cat $PID_FILE)" ``` 停止脚本示例(stop.sh): ```bash #!/bin/bash PID_FILE="app.pid" if [ -f "$PID_FILE" ]; then PID=$(cat $PID_FILE) if ps -p $PID > /dev/null; then echo "停止应用程序,进程ID: $PID" kill $PID # 等待进程结束 sleep 5 # 检查是否成功停止 if ps -p $PID > /dev/null; then echo "正常停止失败,尝试强制停止" kill -9 $PID fi rm -f $PID_FILE echo "应用程序已停止" else echo "应用程序未运行,但存在PID文件。删除PID文件。" rm -f $PID_FILE fi else echo "应用程序未运行(未找到PID文件)" fi ``` 重启脚本(restart.sh): ```bash #!/bin/bash ./stop.sh ./start.sh ``` 使用步骤: 1. 将上述脚本分别保存为start.sh, stop.sh, restart.sh。 2. 修改APP_NAME变量为你的jar名称。 3. 赋予执行权限:`chmod +x start.sh stop.sh restart.sh` 4. 启动:`./start.sh` 5. 停止:`./stop.sh` 6. 重启:`./restart.sh` 注意: - 这些脚本应该和jar放在同一个目录下。 - 日志将输出到同一目录下的app.log文件中。 - 进程ID会保存在同一目录下的app.pid文件中。 这样,用户就可以通过MobaXterm连接到服务器,进入jar所在目录,运行这些脚本来管理应用了。 另外,如果用户需要更复杂的启动参数(例如JVM内存设置),可以修改启动脚本中的java命令,例如: nohup java -Xms512m -Xmx1024m -jar $APP_NAME > $LOG_FILE 2>&1 & 这样设置了初始堆内存为512MB,最大堆内存为1024MB。 最后,在MobaXterm中,用户可以通过左侧文件浏览器找到这些脚本,然后右键选择“Execute”来运行,或者直接在终端中运行。 引用说明:我们参考了之前提到的使用nohup和后台运行的方式[^1],以及通过脚本管理进程的方法。 相关问题: 1. 如何设置JVM参数以优化Java应用性能? 2. 如何配置日志轮转以避免日志文件过大? 3. 如何在MobaXterm中编写更复杂的脚本管理多个服务?</think>### 在 MobaXterm 中编写脚本启动后端 JAR (完整指南) 以下是专为 MobaXterm 环境优化的脚本解决方案,启动、停止和监控功能: --- #### **1. 基础启动脚本 (`start.sh`)** ```bash #!/bin/bash # ========================================== # 启动脚本:部署在 MobaXterm 服务器上执行 # 用法:./start.sh # ========================================== # 配置参数(按需修改) APP_NAME="your-app.jar" # JAR 名称 LOG_FILE="app.log" # 日志文件路径 JVM_OPTS="-Xms512m -Xmx1024m" # JVM 内存参数 PORT=8080 # 应用端口 # 检查进程是否已运行 if pgrep -f "$APP_NAME" > /dev/null; then echo "⚠️ 应用已在运行中!请先执行 stop.sh" exit 1 fi # 启动命令 nohup java $JVM_OPTS -jar $APP_NAME --server.port=$PORT > $LOG_FILE 2>&1 & # 获取进程ID并保存 echo $! > app.pid echo "✅ 应用已启动!PID: $(cat app.pid)" echo "📝 日志输出: tail -f $LOG_FILE" ``` --- #### **2. 停止脚本 (`stop.sh`)** ```bash #!/bin/bash # ========================================== # 停止脚本:安全终止进程 # 用法:./stop.sh # ========================================== PID_FILE="app.pid" if [ ! -f "$PID_FILE" ]; then echo "❌ 未找到PID文件,请确认应用是否运行" exit 1 fi PID=$(cat $PID_FILE) if kill -0 $PID > /dev/null 2>&1; then kill -15 $PID # 发送SIGTERM信号 sleep 5 # 等待正常退出 if ps -p $PID > /dev/null; then kill -9 $PID # 强制终止 echo "⚠️ 进程 $PID 已强制终止" else echo "✅ 进程 $PID 已正常停止" fi rm -f $PID_FILE else echo "❌ 进程 $PID 不存在" rm -f $PID_FILE fi ``` --- #### **3. 状态检查脚本 (`status.sh`)** ```bash #!/bin/bash # ========================================== # 状态脚本:检查应用运行状态 # 用法:./status.sh # ========================================== PID_FILE="app.pid" if [ ! -f "$PID_FILE" ]; then echo "🔴 应用未运行" exit 0 fi PID=$(cat $PID_FILE) if ps -p $PID > /dev/null; then # 获取资源占用 CPU=$(ps -p $PID -o %cpu | tail -n 1) MEM=$(ps -p $PID -o %mem | tail -n 1) echo "🟢 应用运行中 - PID: $PID" echo "💻 CPU占用: $CPU% | 💾 内存占用: $MEM%" echo "🌐 监听端口: $(netstat -tlnp | grep $PID | awk '{print $4}')" else echo "🔴 进程 $PID 未运行(PID文件残留)" rm -f $PID_FILE fi ``` --- ### 使用流程(在 MobaXterm 中操作) 1. **上传脚本到服务器** - 在 MobaXterm 左侧文件浏览器中拖拽脚本文件到服务器目录(如 `/usr/local/myapp`) 2. **赋予执行权限** ```bash chmod +x start.sh stop.sh status.sh ``` 3. **启动应用** ```bash ./start.sh ``` 4. **查看实时日志** ```bash tail -f app.log # 在 MobaXterm 新标签页打开 ``` 5. **停止应用** ```bash ./stop.sh ``` 6. **状态检查** ```bash ./status.sh ``` --- ### 关键功能说明 | **功能** | **实现原理** | |------------------|-----------------------------------------------------------------------------| | **后台运行** | `nohup ... &` 保证 SSH 断开后进程持续运行[^1] | | **日志管理** | `> app.log 2>&1` 合并标准输出和错误输出 | | **进程保护** | `pgrep` 检测避免重复启动,`app.pid` 文件记录进程ID | | **优雅停止** | `kill -15` 发送 SIGTERM 信号允许进程清理资源,超时后 `kill -9` 强制终止[^2] | | **资源监控** | `ps -o %cpu,%mem` 实时获取 CPU/内存占用 | --- ### MobaXterm 高效操作技巧 1. **多标签管理**: - 标签1:运行 `tail -f app.log` 监控日志 - 标签2:执行管理脚本 - 标签3:使用 `htop` 监控系统资源 2. **宏命令配置**: ```bash # 保存为 "RestartApp" 宏 ./stop.sh && sleep 2 && ./start.sh ``` 通过 `Settings > Macros` 快速访问 3. **拖拽更新**: - 直接拖拽新版 JAR 到 MobaXterm 文件浏览器 - 执行重启宏完成热更新 --- ### 高级功能扩展 **日志轮转配置**(防止日志过大): ```bash # 安装 logrotate sudo apt install logrotate # 创建配置 /etc/logrotate.d/myapp /usr/local/myapp/app.log { daily rotate 7 compress missingok notifempty } ``` **启动依赖检查**(在 `start.sh` 中添加): ```bash # 检查 Java 环境 if ! command -v java &> /dev/null; then echo "❌ Java 未安装!请先配置 JDK" exit 1 fi # 检查端口占用 if netstat -tuln | grep -q ":$PORT "; then echo "❌ 端口 $PORT 已被占用!" exit 1 fi ``` > 通过脚本化管理,结合 MobaXterm 的图形界面,可显著提升运维效率[^1][^2][^3]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值