shell脚本启动/停用/重启java项目

文章提供了三个Shell脚本,分别用于启动、停用和重启Java应用程序。脚本中详细定义了JVM参数,并通过`ps-ef`命令查找并管理相关进程。启动时,使用`nohup`在后台运行,并将日志输出重定向。停用脚本通过发送SIGTERM和SIGKILL信号优雅地或强制停止进程。重启则先执行停用再启动的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

shell脚本启动/停用java项目

一、启动

#!/usr/bin/env bash
#!/bin/sh
RESOURCE_NAME=xss-admin.jar #设置启动jar文件名
#配置jvm 
JAVA_OPTS="-Xms4048M -Xmx4048M -Xmn2024M -Xss1M -XX:PermSize=512M -XX:MaxPermSize=512M -Duser.timezone=Asia/Shanghai -Dfile.encoding=utf-8"
 
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'App is running.'
else
    echo 'App is NOT running.'
fi
 
rm -f tpid
#nohup java  -Xms2048M -Xmx2048M  -XX:PermSize=256M -XX:MaxPermSize=256M -Duser.timezone=Asia/Shanghai -Dfile.encoding=utf-8  -jar ./$RESOURCE_NAME  >/dev/null 2>&1 &
nohup java $JAVA_OPTS -jar ./$RESOURCE_NAME  --spring.profiles.active=dev > xss-admin.log &
echo $! > tpid
echo Start Success!

tail -f /opt/service/xss/pc/xss-admin.log

二、停用

#!/usr/bin/env bash
#!/bin/sh
RESOURCE_NAME=xss-admin.jar #设置启动jar文件名

tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi

三、重启

这段代码是用来停止并重新启动一个名为"anju-hjl"的Java项目。

首先,使用"ps -ef"命令列出所有正在运行的进程,并通过管道符号"|"将结果传递给下一个命令。然后使用"grep java"过滤出所有包含"java"关键字的进程。接着使用"grep project_name"过滤出包含"anju-hjl"关键字的进程。再使用"grep -v grep"过滤掉包含"grep"关键字的进程。最后使用"awk '{print
2}’"提取出进程ID,并使用"xargs kill -s 9"命令发送强制终止信号(信号编号为9)来杀死这些进程。

接下来,使用"nohup"命令在后台运行一个新的Java进程。该进程使用"/app/jdk1.8.0_92/bin/java"路径下的Java虚拟机来执行一个可执行的jar包(projectname.jar)。同时,通过"−Xms256m"和"−Xmx3024m"参数设置了Java进程的初始堆大小和最大堆大小。另外,通过"–spring.profiles.active=anjuprod"参数设置了Spring框架的活动配置文件为"anjuprod"。最后,通过">
{project_name}.log"将进程的输出重定向到一个日志文件中。

最后一行代码使用"tail -f"命令实时监控名为"${project_name}.log"的日志文件的变化,并将变化的内容输出到终端。这样可以实时查看项目的日志信息。

project_name=anju-hjl
ps -ef | grep java | grep $project_name |grep -v grep | awk '{print $2}' | xargs kill -s 9
nohup /app/jdk1.8.0_92/bin/java -jar -Xms256m -Xmx3024m  ${project_name}.jar --spring.profiles.active=anjuprod > ${project_name}.log &
tail -f /opt/service/iot/hjl/${project_name}.log

### 如何在Java中执行Linux Shell脚本 为了实现从Java程序调用并执行Linux中的Shell脚本,可以采用`Runtime.getRuntime().exec()`或`ProcessBuilder`类来启动新的进程运行外部命令。下面展示了一种通过`ProcessBuilder`的方式完成此操作的方法[^3]。 ```java import java.io.BufferedReader; import java.io.InputStreamReader; public class ExecuteShellScript { public static void main(String[] args) { try { // 创建 ProcessBuilder 对象,并指定要执行的 shell 脚本路径及其参数 String scriptPath = "/usr/local/app/deploy/test.sh"; String param1 = "coding"; String param2 = "life"; ProcessBuilder pb = new ProcessBuilder(scriptPath, param1, param2); // 设置环境变量(如果需要) //pb.environment().put("VAR_NAME", "value"); // 启动新进程 Process process = pb.start(); // 获取命令输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); StringBuilder outputBuffer = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { outputBuffer.append(line).append("\n"); } int exitCode = process.waitFor(); // 等待子进程结束 System.out.println("Exit Code : " + exitCode); System.out.println("Output:\n" + outputBuffer.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码片段展示了如何利用`ProcessBuilder`对象构建对外部shell脚本(`/usr/local/app/deploy/test.sh`)的调用请求,并传递两个字符串类型的参数给该脚本。之后读取由shell脚本产生的标准输出直到其终止为止。最后打印出退出状态码以及收集到的标准输出信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值